代码之家  ›  专栏  ›  技术社区  ›  brice

如何检查方法在Java中返回集合< Foo>?

  •  6
  • brice  · 技术社区  · 14 年前

    我希望检查基于签名的接口中是否存在方法。

    方法应该具有的签名是:

    Collection<Foo> methodName(Spam arg0, Eggs arg1, ...)
    

    我可以通过 Class.getMethods() 然后分别用 method.getName() , method.getParameterTypes() method.getReturnType() .

    但是为了确保只返回 Collection<Foo> 是被选中的,而不是其他收藏?

    method.getReturnType().equals(Collection.class) 
    

    因为上面对于返回集合的所有方法都是正确的,而不仅仅是那些返回 Foo 收集。

    3 回复  |  直到 14 年前
        1
  •  8
  •   Colin Hebert    14 年前

    有一个方法名为 public Type getGenericReturnType() 如果是这样的话,它可以返回 ParameterizedType .

    参数化类型 可以为您提供有关泛型类型的更多信息,例如 Collection<Foo> .

    尤其是与 getActualTypeArguments() 方法可以获取每个参数的实际类型。

    在这里, 参数化类型 表示集合和 GetActualTypeArguments()。 表示包含foo的数组

    可以尝试此操作列出泛型类型的参数:

    Type returnType = method.getGenericReturnType();
    if (returnType instanceof ParameterizedType) {
        ParameterizedType type = (ParameterizedType) returnType;
        Type[] typeArguments = type.getActualTypeArguments();
        for (Type typeArgument : typeArguments) {
            Class typeArgClass = (Class) typeArgument;
            System.out.println("typeArgClass = " + typeArgClass);
        }
    }
    

    资料来源: http://tutorials.jenkov.com/

        3
  •  0
  •   Raoul Duke    14 年前

    泛型类型参数在运行时不保留(即它只是编译时的特性),所以不能这样做。