2017-09-27 78 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

有是用於解碼通用信息字節碼內的額外信息。