获取Class <t>文字或类型

时间:2015-09-14 17:23:23

标签: java reflection moshi

是否可以获得与Class<List<Data>>.class类似的内容?我读过你不能打电话给.class,因为它是如何工作的,所以我想知道是否可能使用与new ArrayList<Data>().getClass()类似的东西?特别是那一个不起作用,因为返回的类是Class<? extends List<Data>>所以我没有选择,是否可能?

上下文:我正在尝试使用square/moshi解析List<Data>,但该库似乎处于alpha状态,因此没有相关文档。

1 个答案:

答案 0 :(得分:2)

没有Class对象代表List<Data>,因为泛型类型只是编译时功能。通过执行此操作可以生成静态类型Class<List<Data>>的变量

Class<List<Data>> clazz = (Class<List<Data>>) (Object) List.class;

您在此处收到编译器警告。实际上clazz只是List.class而且编译器警告提示您正在做的事情并不是一个好主意。

没有Class个对象代表List<Data>,但有Type个对象。

试试这个:

public class Main {

    List<String> list;

    public static void main(String[] args) throws Exception {
         // prints java.util.List<java.lang.String>
         System.out.println(Main.class.getField("list").getGenericType());   
    }
}