-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'使用此元數據向您顯示通用簽名而不是原始(已擦除)簽名。 –