【发布时间】:2016-03-31 23:31:04
【问题描述】:
我知道在 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;
}
}
不应该把类型参数T当作Object吗? (因此不允许我调用 close() 或 append())??
【问题讨论】:
-
哪一部分不明白?
method? -
@SMA 类型为类型参数的变量应该只能使用参数擦除类型的成员(据说它是列表中最左边的绑定)。我的代码中不是这种情况。
-
编译器没有这个问题。你不应该问为什么运行时能够调用
t.close()尽管类型擦除? -
@wero 为什么会这样?该类型被擦除为
AutoCloseable,并且OP希望它被擦除为Object。另请参阅我的答案(这还不是真正的答案)
标签: java generics type-parameter type-bounds