Java 类型擦除和多重边界

Luc*_*uca 5 java generics type-parameter type-bounds

我知道在 Java 泛型中,当使用具有多个边界的类型参数时,编译器会将类型信息擦除到“最左边的边界”(即列表中的第一个类/枚举或接口)。那么为什么下面的代码编译没有问题呢?

public class Generic<T extends Object & Appendable & AutoCloseable> {

  T t;

  T method() throws Exception {
    t.close();
    char c='\u0000';
    t.append(c);
    return t;
  }

  public <T> T method2(T t) {
    return t;
  }  

}
Run Code Online (Sandbox Code Playgroud)

类型参数 T 不应该被视为 Object 吗??(因此不允许我调用 close() 或 append())??

Rus*_*uka 0

您应该在这里阅读有关桥接方法的内容

当编译扩展参数化类或实现参数化接口的类或接口时,编译器可能需要创建一个称为桥接方法的合成方法,作为类型擦除过程的一部分。您通常不需要担心桥接方法,但如果桥接方法出现在堆栈跟踪中,您可能会感到困惑。