-1
我使用javap反编译Map类。类定义仍然显示泛型类型K和V的存在。 这应该通过类型擦除的概念来消除。为什么没有发生?类型擦除不工作在Java地图类
./javap -verbose java.util.Map
Classfile jar:file:/opt/jdk1.8.0_101/jre/lib/rt.jar!/java/util/Map.class
Last modified 22 Jun, 2016; size 4127 bytes
MD5 checksum 238f89b3e2ff9bebe07aa22b0a3493a9
Compiled from "Map.java"
public interface java.util.Map<K extends java.lang.Object, V extends java.lang.Object>
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT
Constant pool:
您正在查看调试信息。 – EJP
接口定义仍然具有通用参数K和V.不应该由类型擦除的概念擦除它们吗? –
是的,没有。还有一些关于类型参数和通用超类型的元数据。必须有,否则你不能使用泛型类型,除非你有源代码给他们,因为编译器无法知道它们是通用的。但是该元数据是类文件中的“额外”信息。 'javap'使用此元数据向您显示通用签名而不是原始(已擦除)签名。 –