我想使用Java Generics
特性来实现一个通用的功能。但我不知道如何获得自定义类对象的java.lang.reflect.Type
对象。以下是我的情况,我想从给定的类名中获得一个类型,并将其传递给ProcessedResult<T>
以取代T
:
String className = getClassName();
Class clazz = Class.forName(className);
Type type = null;
ProcessedResult<T> result = new ProcessedResult<T>();
我尝试使用ProductModel.class.getGenericSuperclass()
,但作为它的名字,它只返回它的超类的类型。
不能指定运行时确定的类型作为泛型类型的编译时替代。
类型T
实际上只在编译时强制执行,因为类型擦除。因此,当您在运行时拥有实际类型时,任何信息或检查都已经完成并消失了。
您的ProcessedResult
将不得不与Class<T>
或Type
对象一起工作,而不是做任何有用的工作。
java.lang.reflect.Type
是not泛型接口。
如果你想使用Type
,
你可以使用instance.getClass()
或ClassName.class
,因为它返回Class<?>
和Class
实现Type
接口。所以应该行得通。
您必须使用ProcessedResult<Type>
或ProcessedResult<Class<?>>