我想使用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()
,但作为其名称,它只返回其超类的类型。
有人可以帮我吗?感谢。
答案 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<?>>