如何获取泛型接口的方法返回值类型?

Llwjz 2018-12-14 02:50:00
例如下面的泛型接口:

public interface Test<V>
{
V call();
}

在运行时,如何获取各实现该接口类的方法的V类型呢?
...全文
767 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Saleayas 2018-12-17
  • 打赏
  • 举报
回复
非常遗憾的告诉你,好像是不能的,泛型被消除了。 所以很多的方法都需要传入 Class 的。
maradona1984 2018-12-17
  • 打赏
  • 举报
回复
引用 6 楼 Saleayas 的回复:
非常遗憾的告诉你,好像是不能的,泛型被消除了。
所以很多的方法都需要传入 Class 的。

方法和类的都可以获取,类的应该获取无压力的(匿名类没试过)
方法的泛型也能获取,但返回值

public <T> List<T> get(){

}

这种就只能获取到T,入参能拿到具体对象,获取也是无压力的

较高版本jdk应该都能获取的
Llwjz 2018-12-15
  • 打赏
  • 举报
回复
补充一点,该接口是通过方法引用实现的,用各位的方法获取到的,都是默认的Object类型。
  • 打赏
  • 举报
回复
maven配置: <dependency> <groupId>org.reflections</groupId> <artifactId>reflections-spring</artifactId> <version>0.9.9-RC1</version> </dependency>
  • 打赏
  • 举报
回复
可以通过获取该类的所有实现类去获取各自的返回值。 具体参考:

        List<Test> monitorLists = new ArrayList<>();
        //delayedFindPackageName 代表包路径
        Reflections reflections = new Reflections(delayedFindPackageName);
        Set<Class<? extends Test>> monitorClasses = reflections.getSubTypesOf(Test.class);
        for (Class<? extends Test> monitor : monitorClasses) {
            monitorLists.add(ApplicationContext.getBean(monitor));
        }
爱码少年 2018-12-14
  • 打赏
  • 举报
回复
爱码少年 2018-12-14
  • 打赏
  • 举报
回复

  ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();
 (Class)pt.getActualTypeArguments()[0];

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧