我正在阅读Herbert关于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中新修复的结果。id=4870651
如果我从JDK1.6运行javap,就会得到我所期望的结果。如果我从JDK1.7 b30运行javap --这是我最初使用的--我将得到泛型信息的结果。
发布于 2019-01-09 15:11:37
https://stackoverflow.com/questions/15908771
复制相似问题