如何通过检查找到返回类型的参数化类型?

我正在使用reflection来获取所有类中的所有方法:

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 getCats(); 

如何使用reflection找出包含Cat作为参数化类型的返回类型?

你试过getGenericReturnType()吗?

返回一个Type对象,该对象表示此Method对象表示的方法的正式返回类型。

如果返回类型是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。

如果返回类型是类型变量或参数化类型,则会创建它。 否则,它就解决了。

然后(从查看Javadocs),您似乎必须将其getActualTypeArguments()ParameterizedType并在其上调用getActualTypeArguments()

所以这里是一些示例代码:

  for (Method m : allMethods) { Type t = m.getGenericReturnType(); if (t instanceof ParameterizedType) { System.out.println(t); // "java.util.Set" for (Type arg : ((ParameterizedType)t).getActualTypeArguments()) { System.out.println(arg); // "class yourpackage.Cat" } } }