java - 获取 Class<T> 文字或类型

标签 java reflection moshi

是否有可能得到类似Class<List<Data>>.class的东西?我听说你不能打电话.class由于它在内部的工作原理,所以我想知道是否可以使用类似于 new ArrayList<Data>().getClass() 的东西可能有用吗?该类尤其不起作用,因为返回的类是 Class<? extends List<Data>>所以我别无选择,这可能吗?

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

最佳答案

没有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());   
    }
}

关于java - 获取 Class<T> 文字或类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32570393/

相关文章:

java - loadClass() 和 forName() 之间的区别

kotlin - 如何在 Moshi 中将 json 对象保留为原始字符串

使用 Eclipse 或其他方式在 linux 目标上进行 Java 远程调试

java - 使用数组列表并创建对象

java - 从结果集中输出大的 xml

c# - 在运行时创建一个类

java - 如何在多个线程之间传递数据和信号

java - 调用泛型参数的构造函数或获取类对象(或者为什么它不起作用?)

java - Moshi 预期为 BEGIN_OBJECT 但为 BEGIN_ARRAY - 自定义转换器被忽略

java - Moshi 找不到我用 Kotlin 为参数化类型编写的自定义适配器