首页 文章

如何推断具有泛型返回类型的方法的特定返回类型?

提问于
浏览
2

给定以下界面:

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 回答

  • 2

    您可以使用下面的代码执行此操作 . 这里的想法是泛型类型信息可能在字节代码中可用,并且可以在运行时访问 . 有关详细信息,请参阅以下链接 .

    ParameterizedType parameterizedType = (ParameterizedType) subClass.getGenericSuperclass();
    09
      return (Class<?>) parameterizedType.getActualTypeArguments()[parameterIndex];
    

    https://www.javacodegeeks.com/2013/12/advanced-java-generics-retreiving-generic-type-arguments.html

    在线还有一些其他有用的文章也描述了这一点 .

  • 0

    Ankur的回答是正确的,因为它提供了使用技术的提示 . 但是,涵盖所有边缘情况的通用解决方案非常复杂,这证明需要一个小型库 .

    在更多地研究了这个主题后,我发现了这个出色的解决方案:https://github.com/leangen/geantyref#getting-the-exact-return-type-of-a-method

相关问题