给定以下界面:
interface Random extends java.util.function.Supplier<Integer> { }
与 java.util.function.Supplier
看起来像这样(缩写):
public interface Supplier<T> { T get(); }
现在考虑以下内容:
java.lang.reflect.Method get = Random.class.getMethod("get");
System.out.println(get.getReturnType()); // prints `class java.lang.Object`
System.out.println(get.getGenericReturnType()); // prints `T`
我如何推断返回类型实际应该是 java.lang.Integer
?
2 回答
您可以使用下面的代码执行此操作 . 这里的想法是泛型类型信息可能在字节代码中可用,并且可以在运行时访问 . 有关详细信息,请参阅以下链接 .
https://www.javacodegeeks.com/2013/12/advanced-java-generics-retreiving-generic-type-arguments.html
在线还有一些其他有用的文章也描述了这一点 .
Ankur的回答是正确的,因为它提供了使用技术的提示 . 但是,涵盖所有边缘情况的通用解决方案非常复杂,这证明需要一个小型库 .
在更多地研究了这个主题后,我发现了这个出色的解决方案:https://github.com/leangen/geantyref#getting-the-exact-return-type-of-a-method