[英]javap and generics' type erasure
我正在閱讀有關Java泛型中的類型擦除的Herbert Schilds。 假設在類上運行javap應該為我提供有關類型擦除后有關public,包保護和受保護字段以及方法的字節碼信息。 但是,我編寫了以下課程:
class Ambiguity<T, V extends String>{
T ob1;
V ob2;
void set(T o){
ob1 = o;
}
void set(V o){
ob2 = o;
}
}
並在生成的類文件上運行javap並獲得以下輸出
從“ Test.java”編譯
class Ambiguity<T, V extends java.lang.String> {
T ob1;
V ob2;
Ambiguity();
void set(T);
void set(V);
}
根據我閱讀的內容,我期待的輸出看起來像這樣。
Compiled from "Test.java"
class Ambiguity<java.lang.Object, java.lang.String> {
java.lang.Object ob1;
java.lang.String ob2;
Ambiguity();
void set(java.lang.Object);
void set(java.lang.String);
}
我在這里想念什么嗎? 我應該補充一點,我理解以上述方式重載方法不是一個好習慣。 我只是看到有興趣在這種歧義下看到javap的結果。
編輯:這似乎是javap中新修復程序的結果。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4870651
如果我從JDK 1.6運行javap,則會得到預期的結果。 如果我從最初使用的JDK 1.7 b30運行javap,則將獲得帶有通用信息的結果。
我不確定。 但似乎signature
屬性是在jvm 7中引入的(請參閱jvm規范) 。
此屬性將捕獲用於調試和反射api的簽名信息。
要查看signature
屬性,請使用javap -v <class>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.