小编典典

获取通用类类型

java

嗨,Java中有什么方法可以获取静态通用类类型

我结束了构建

    List<TaskLocalConstraints> l = new ArrayList<TaskLocalConstraints>();
    Class<List<TaskLocalConstraints>> c = (Class<List<TaskLocalConstraints>>)l.getClass();

我想知道是否存在类似的东西:

    Class c = List<TaskLocalConstraints>.class;

(我真的不想构造新的对象只是为了获得其类型)

谢谢


阅读 211

收藏
2020-11-16

共1个答案

小编典典

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

Class<List<TaskLocalConstraints>> c 
    = (Class<List<TaskLocalConstraints>>) List.class;

但是由于某种原因,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;

好吧,那我们就傻了吧:

Class<List<String>> c = 
   (Class<List<String>>) (Class<?>) List.class;

这很愚蠢,但是有效。它会产生“未经检查”的警告,但是您的示例也是如此。请注意,尽管如此,它不会产生与您的示例相同的类。您的示例返回了对象的实际类,即ArrayList。这List显然是返回的。

2020-11-16