为什么这个类型参数保留在字节码中?

Boz*_*zho 8 java generics

类型擦除页说,

如果类型参数是无界的,则用泛型或对象替换泛型类型中的所有类型参数.因此,生成的字节码仅包含普通的类,接口和方法.

但是,对于以下类:

public class Foo<E extends CharSequence> {
    public E something;
}
Run Code Online (Sandbox Code Playgroud)

javap -c Foo 打印:

public class Foo<E extends java.lang.CharSequence> {
  public E something;
}
Run Code Online (Sandbox Code Playgroud)

为什么type参数不会被绑定(CharSequence)替换,而是保存为E?

use*_*421 7

你打印的不是字节码.这是方法签名.它放在那里,因此编译器可以在编译调用它的其他类时强制执行类型安全.