我想根据方法的签名检查接口(interface)中是否存在方法。
该方法应具有的签名是:
Collection<Foo> methodName(Spam arg0, Eggs arg1, ...)
我可以通过 Class.getMethods()
找到方法
然后用method.getName()
分别找到名称、参数和返回类型, method.getParameterTypes()
和 method.getReturnType()
.
但是我要将返回类型与什么进行比较以确保只有返回 Collection<Foo>
的方法被选中,而不是其他集合?
method.getReturnType().equals(Collection.class)
因为以上内容适用于所有返回集合的方法,而不仅仅是那些返回 Foo
的方法。 Collection 。
最佳答案
有一个名为 public Type getGenericReturnType()
的方法它可以返回(如果是这样的话)一个 ParameterizedType
.
A 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);
}
}
关于java - 如何检查方法是否在 Java 中返回 Collection<Foo>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531976/