![](/img/trans.png)
[英]How to check that java.lang.reflect.Method return type is Collection?
[英]How to check that a method returns Collection<Foo> in Java?
我希望检查接口中是否存在基于其签名的方法。
该方法应具有的签名是:
Collection<Foo> methodName(Spam arg0, Eggs arg1, ...)
我可以通过Class.getMethods()
找到方法,然后分别使用method.getName()
, method.getParameterTypes()
和method.getReturnType()
查找名称,参数和返回类型。
但是,为了确保只选择返回Collection<Foo>
方法而不选择其他集合,我应该如何比较返回类型?
method.getReturnType().equals(Collection.class)
由于上述内容对于返回集合的所有方法都是如此,而不仅仅是那些返回Foo
集合的方法。
有一个名为public Type getGenericReturnType()
,它可以返回一个ParameterizedType
(如果是这种情况)。
ParameterizedType
可以为您提供有关泛型类型(如Collection<Foo>
更多信息。
特别是使用getActualTypeArguments()
方法,您可以获得每个参数的实际类型。
这里, ParameterizedType
表示Collection, 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/
通用类型参数在Java中不会保留(即,它只是一个编译时功能),因此您无法执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.