Java 如何获取对“类”的引用<;T>;`具有特定类型参数的泛型类的对象?
例如,我可以Java 如何获取对“类”的引用<;T>;`具有特定类型参数的泛型类的对象?,java,reflection,Java,Reflection,例如,我可以 Class c = Map.class; 但是如果我需要c来引用类Map,该怎么办 我想做些能表达 Class c = (Map<String, ValueClass>).class; Class c=(Map).Class; 我的用例是,我需要这样做,以便我可以将c传递给spcecific类型Map与Map共享同一类对象,因此您无法获得自定义类对象 在运行时,(Map).class等于Map.class,因为: publicstaticvoidmain(字符串[
Class c = Map.class;
但是如果我需要c
来引用类Map
,该怎么办
我想做些能表达
Class c = (Map<String, ValueClass>).class;
Class c=(Map).Class;
我的用例是,我需要这样做,以便我可以将
c
传递给spcecific类型Map
与Map
共享同一类对象,因此您无法获得自定义类对象
在运行时,(Map).class
等于Map.class
,因为:
publicstaticvoidmain(字符串[]args){
Map Map=newhashmap();
Map anotherMap=newhashmap();
System.out.println(map.getClass().equals(anotherMap.getClass());//true
}
spcecific类型Map
与Map
共享同一类对象,因此无法获取自定义类对象
在运行时,(Map).class
等于Map.class
,因为:
publicstaticvoidmain(字符串[]args){
Map Map=newhashmap();
Map anotherMap=newhashmap();
System.out.println(map.getClass().equals(anotherMap.getClass());//true
}
如果您确实希望获得所需的静态类型,可以使用强制类型转换(尽管是通过原始类型)强制实现:
实现通过比较参数来检索构造函数(检查java.lang.Class.arrayContentsEq(Object[],Object[])
)。
总而言之,它归结为比较
(Class)cl==Map.Class
,并在运行时返回true
,这解释了为什么查找泛型类实例没有用
Class cl
的值只有在用于静态类型检查时才有效,但在这种情况下,它没有帮助。如果您确实希望获得所需的静态类型,可以使用强制类型转换(尽管是通过原始类型)强制实现:
实现通过比较参数来检索构造函数(检查java.lang.Class.arrayContentsEq(Object[],Object[])
)。
总而言之,它归结为比较
(Class)cl==Map.Class
,并在运行时返回true
,这解释了为什么查找泛型类实例没有用
Class cl
的值只有在用于静态类型检查时才有效,但在本例中,它没有帮助。这解释了为什么我提出的方法不起作用,但如何获得具有特定类型参数的泛型类的引用的问题仍然存在。除非它根本无法完成,否则在这种情况下,某些东西会被破坏,因为这就是getConstructor
方法所期望的,然后更新答案以反映该声明,如果没有人不同意,我将接受它。然后我猜如何处理getConstructor
变成了一个不同的问题。这解释了为什么我提出的方法不起作用,但如何获得对具有特定类型参数的泛型类的引用的问题仍然存在。除非它根本无法完成,否则在这种情况下,某些东西会被破坏,因为这就是getConstructor
方法所期望的,然后更新答案以反映该声明,如果没有人不同意,我将接受它。然后我猜如何处理getConstructor
变成了一个不同的问题如果我理解正确,你应该看看这个:如果我理解正确,你应该看看这个:
public static void main(String[] args) {
Map map = new HashMap();
Map<String, Integer> anotherMap = new HashMap<>();
System.out.println(map.getClass().equals(anotherMap.getClass())); // true
}
Class<Map<String, Object>> cl = (Class) Map.class;
getConstructor(Class<?>... parameterTypes)