获取泛型类类型

mal*_*ouk 7 java generics

嗨,有任何方法在Java中获得静态泛型类类型

我最终得到了构造

    List<TaskLocalConstraints> l = new ArrayList<TaskLocalConstraints>();
    Class<List<TaskLocalConstraints>> c = (Class<List<TaskLocalConstraints>>)l.getClass();
Run Code Online (Sandbox Code Playgroud)

我想知道,如果存在类似的东西:

    Class c = List<TaskLocalConstraints>.class;
Run Code Online (Sandbox Code Playgroud)

(我真的不想构造新的Object只是为了得到它的类型)

谢谢

Ser*_*nov 7

由于所有List<something>类在运行时实际上都对应于同一个类,因此您可以这样做:

Class<List<TaskLocalConstraints>> c 
    = (Class<List<TaskLocalConstraints>>) List.class;
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,Java不喜欢它.用String测试:

Laj.java:9: inconvertible types
found   : java.lang.Class<java.util.List>
required: java.lang.Class<java.util.List<java.lang.String>>
Class<List<String>> c = (Class<List<String>>) List.class;
Run Code Online (Sandbox Code Playgroud)

那么,让我们欺骗它:

Class<List<String>> c = 
   (Class<List<String>>) (Class<?>) List.class;
Run Code Online (Sandbox Code Playgroud)

这很愚蠢,但它确实有效.它产生一个"未经检查"的警告,但你的例子也是如此.但请注意,它不会导致与您的示例相同的类.您的示例返回对象的实际类,即ArrayList.List显然,这一回归.