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)