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)
?- 理論的には、消去は暗黙のキャストと同じですか?