老师,请问为什么能通过反射获取到泛型的类型呢?
来源:3-5 Java 泛型的实现机制是怎样的?

慕九州6385248
2019-09-11
老师,你好:
关于泛型,我还是有两点疑问
1. 我定义了一个 List<String> list = new ArrayList<>();
反编译查看并没有转化成 Object,还是 String,如果我自己实现了一个类,用到了泛型,反编译看还 <T>
2. 如果类型擦除了,为什么通过反射能获取到类型呢,是通过方法的签名吗
写回答
2回答
-
类型擦除是一定会有的,可能 jadx-gui 反编译的时候解析了签名信息。这个签名信息会在类和方法上有,其中包含泛型的参数信息,反射能够在一定条件下获取到泛型实参也是基于这个签名。
如果想要看类型擦除的现象,建议直接看字节码,Kotlin 的话在 IntelliJ 或者 Android Studio 里用 Show Kotlin Bytecode 就可以看到;Java 的话,安装一个 bytecode outline 就可以查看啦
112019-09-11 -
bennyhuo
2019-09-11
左边是代码,右边是字节码,字节码里面框起来的部分就是签名
10
相似问题