3

我想使用 JavaGenerics特性来实现一个通用的功能。但是我不知道如何java.lang.reflect.Type为自定义类对象获取对象。以下是我想从给定类名中获取 Type 并将其传递ProcessedResult<T>给 replace 的情况T

String className = getClassName();
Class clazz = Class.forName(className);
Type type = null;
ProcessedResult<T> result = new ProcessedResult<T>();

我尝试使用ProductModel.class.getGenericSuperclass(),但作为它的名称,它只返回其超类的类型。

有人可以帮我吗?谢谢。

4

2 回答 2

5

您不能将运行时确定的类型指定为泛型类型的编译时替换。

由于类型擦除,您的类型T实际上仅在编译时强制执行。因此,当您在运行时拥有实际类型时,任何信息或检查都已经完成并消失了。

ProcessedResult将不得不使用 a Class<T>orType对象来做任何有用的工作。

于 2013-01-10T08:39:02.720 回答
3

java.lang.reflect.Type不是通用接口。

另外,如果您想要Type使用,

您可以使用instance.getClass()or ClassName.class,因为它返回Class<?>Class实现Type接口。所以它应该工作。

您将不得不使用ProcessedResult<Type>ProcessedResult<Class<?>>

于 2013-01-10T08:13:57.563 回答