2017-09-27 34 views
-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: 
+0

您正在查看调试信息。 – EJP

+0

接口定义仍然具有通用参数K和V.不应该由类型擦除的概念擦除它们吗? –

+0

是的,没有。还有一些关于类型参数和通用超类型的元数据。必须有,否则你不能使用泛型类型,除非你有源代码给他们,因为编译器无法知道它们是通用的。但是该元数据是类文件中的“额外”信息。 'javap'使用此元数据向您显示通用签名而不是原始(已擦除)签名。 –

回答

0

有是用于解码通用信息字节码内的额外信息。