我正在阅读 Herbert Schilds 关于 Java 泛型中的类型擦除。假设在一个类上运行 javap 应该在类型擦除后给我关于公共、包保护和受保护字段和方法的字节码信息。但是,我写了以下课程:
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,我会得到带有通用信息的结果。