如何获取自定义类对象的java.lang.Type对象?

时间:2013-01-10 08:04:08

标签: java generics reflection

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

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

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

有人可以帮我吗?感谢。

2 个答案:

答案 0 :(得分:5)

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

您的类型T实际上仅在编译时because of type erasure强制实施。因此,当您在运行时拥有实际类型时,任何信息或检查都已完成并且已经消失。

您的ProcessedResult必须使用Class<T>Type对象,而不是做任何有用的工作。

答案 1 :(得分:3)

java.lang.reflect.Type 不是通用界面。

此外,如果您想要使用Type

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

您必须使用ProcessedResult<Type>ProcessedResult<Class<?>>