例如下面的泛型接口:public interface Test<V>
{
     V call();
}在运行时,如何获取各实现该接口类的方法的V类型呢?

解决方案 »

  1.   


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

  2.   

    参考文档: https://blog.csdn.net/qq_18242391/article/details/54251947
      

  3.   

    可以通过获取该类的所有实现类去获取各自的返回值。具体参考:        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));
            }
      

  4.   

    maven配置:<dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections-spring</artifactId>
        <version>0.9.9-RC1</version>
    </dependency>
      

  5.   

    补充一点,该接口是通过方法引用实现的,用各位的方法获取到的,都是默认的Object类型。
      

  6.   

    非常遗憾的告诉你,好像是不能的,泛型被消除了。
    所以很多的方法都需要传入 Class 的。
      

  7.   

    方法和类的都可以获取,类的应该获取无压力的(匿名类没试过)
    方法的泛型也能获取,但返回值public <T> List<T> get(){}这种就只能获取到T,入参能拿到具体对象,获取也是无压力的较高版本jdk应该都能获取的