javap和generics的类型擦除

B M*_*B M 7 java generics type-erasure javap

我正在阅读Herbert Schilds关于java中泛型的类型擦除.据说在类上运行javap应该在类型擦除后给我关于public,package protected和protected字段和方法的字节码信息.但是,我写了以下课程:

    class Ambiguity<T, V extends String>{
    T ob1;
    V ob2;

    void set(T o){
        ob1 = o;
    }

    void set(V o){
        ob2 = o;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在生成的类文件上运行javap并获得以下输出

编译自"Test.java"

class Ambiguity<T, V extends java.lang.String> {
  T ob1;
  V ob2;
  Ambiguity();
  void set(T);
  void set(V);
}
Run Code Online (Sandbox Code Playgroud)

我期待根据我读到的内容看起来像这样的输出.

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);
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?我应该补充一点,我理解以上述方式重载方法不是一个好习惯.我只是看到有兴趣在这种模棱两可的情况下看到javap的结果.

编辑:这似乎是javap中新修复的结果. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4870651

如果我从JDK 1.6运行javap,我会得到我期望的结果.如果我从最初使用的JDK 1.7 b30运行javap,我会得到带有通用信息的结果.

Mit*_*esh 0

我不知道。但似乎signature属性是在jvm 7中引入的(参考jvm规范)

该属性将捕获用于调试和反射 api 的签名信息。

查看signature属性使用javap -v <class>