我正在使用反射来获取所有类中的所有方法:
Method[] allMethods = c.getDeclaredMethods();
之后我正在迭代方法
for (Method m: allMethods){
//I want to find out if the return is is a parameterized type or not
m.getReturnType();
}
例如:如果我有这样的方法:
public Set<Cat> getCats();
如何使用反射来查找包含Cat
的返回类型作为参数化类型?
答案 0 :(得分:8)
您是否尝试过getGenericReturnType()
?
返回一个
Type
对象,该对象表示此Method
对象表示的方法的正式返回类型。如果返回类型是参数化类型,则返回的
Type
对象必须准确反映源代码中使用的实际类型参数。如果返回类型是类型变量或参数化类型,则会创建它。否则,它就解决了。
然后(从查看Javadocs),您似乎必须将其强制转换为ParameterizedType
并在其上调用getActualTypeArguments()
。
所以这里是一些示例代码:
for (Method m : allMethods) {
Type t = m.getGenericReturnType();
if (t instanceof ParameterizedType) {
System.out.println(t); // "java.util.Set<yourpackage.Cat>"
for (Type arg : ((ParameterizedType)t).getActualTypeArguments()) {
System.out.println(arg); // "class yourpackage.Cat"
}
}
}