通常,仅使用Java本身提供的工具来解决这个问题实际上并不容易。有很多特殊情况(嵌套类,类型参数范围等)需要注意。因此,我编写了一个使泛型类型反射更容易的库:gentyref。我添加了示例代码(以JUnit测试的形式)以显示如何使用它来解决此问题:StackoverflowQ182872Test.java。基本上,您只需
GenericTypeReflector.isSuperType使用
TypeToken(来自Neil
Gafter的想法)进行调用,以查看是否
List<String>为返回类型的超类型。
我还添加了第5个测试用例,以表明
GenericTypeReflector.getExactReturnType有时需要对返回类型()进行额外的转换,以将类型参数替换为其值。



