根据JLS§4.4:
绑定中类型的顺序仅在因为类型变量的擦除由其绑定中的第一个类型确定,并且类类型或类型变量可能只出现在第一个位置时才有意义。
考虑以下代码段:
package TypeVarMembers;
class C {
public void mCPublic() {}
protected void mCProtected() {}
void mCPackage() {}
private void mCPrivate() {}
}
interface I {
void mI();
}
class CT extends C implements I {
public void mI() {}
}
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
//t.mCPrivate(); // Compile-time error
}
}
以下是我的一些疑问-:
- 擦除方法
test(T t)
=>test(C t)
?- 如果是这种情况 - 那么为什么我们在计算 Erasure 时要删除其他类型?
T
方法test(T t)
=>中类型的隐式转换(C & I)
?- 从理论上讲,擦除与隐式强制转换相同吗?