如何检查方法是否在Java中返回Collection <foo>?</foo>

时间:2010-08-20 14:46:12

标签: java reflection

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

该方法应具有的签名是:

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

我可以通过Class.getMethods()找到方法 然后分别使用method.getName()method.getParameterTypes()method.getReturnType()查找名称,参数和返回类型。

但是我要比较返回类型以确保只选择返回Collection<Foo>的方法,而不是其他集合?

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

由于以上所有返回集合的方法都是如此,而不仅仅是那些返回Foo集合的方法。

3 个答案:

答案 0 :(得分:8)

有一个名为public Type getGenericReturnType()的方法可以返回{如果是这种情况)a ParameterizedType

ParameterizedType可以为您提供有关通用类型的更多信息,例如Collection<Foo>

特别是使用getActualTypeArguments()方法,您可以获得每个参数的实际类型。

此处,ParameterizedType表示集合,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/

答案 1 :(得分:2)

答案 2 :(得分:0)

通用类型参数在Java中不会保留(即它只是一个编译时功能),所以你不能这样做。