java - 获取继承泛型方法的返回类型

标签 java generics inheritance

我有这3个类(class)

public class Box<O> {

    public O getItem() {...}

}
public class CoolBox extends Box<Integer> { ... }
public class AmazingBox extends CoolBox { ... }

在我的代码中的某一时刻,我需要获取 AmazingBox 类的方法 getItem() 的返回类型,但是当通过反射访问其方法时,我得到 Object 作为返回类型,而不是 Integer

有什么方法(普通java或额外的库)来获取Integer作为返回类型?

这是我用来获取返回类型的代码:

Class<?> c = AmazingBox.class;  // This is not how i get the class but its for demonstration purposes

Method m = c.getMethod("getItem");

Type t = m.getReturnType();

最佳答案

我刚刚发现有一个名为 GenericsResolver 的库这正是我想要的。

使用这段代码它会返回正确的类型

Class<?> clazz = AmazingBox.class;
GenericsContext genericsContext = GenericsResolver.resolve(clazz);
Method method = clazz.getMethod("getItem");
Type methodReturnType = genericsContext.method(method).resolveReturnType();

关于java - 获取继承泛型方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58482157/

相关文章:

delphi - 具有接口(interface)类型约束的泛型类型的 RTTI

c++ - 抽象类的模板实例化

java - JAXB 生成 nillable=true

java - 用省略号截断字符串的理想方法

java - Spring Hibernate Jpa 错误 : root cause java. lang.IllegalArgumentException: Unknown parameter position: 1

java - 错误 : Failed to resolve: androidx. 应用程序兼容性 :design:1. 1.0

java - 为什么 lambda 类型推断失败,但等效方法引用成功?

java - Java MVC中如何处理事件

c# - 在非类集合类中使用泛型

c++ - 错误 : 'A' is an inaccessible base of 'B'