1

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
    } 
}

ここに私が持っているいくつかの疑問があります-:

  1. メソッドの消去test(T t)=> test(C t)?
    • この場合、Erasure の計算中に追加の型を削除するのはなぜですか?
  2. Tメソッドの型の暗黙のキャストtest(T t)=> (C & I)?
  3. 理論的には、消去は暗黙のキャストと同じですか?
4

0 に答える 0