0

私は持っている:

public class<E extends aninterface> AClass{

    public AClass(){
    }

    public void amethod(E element){
        //something
    }

}

public class B implements aninterface{

}

呼び出しコード:

aninterface f = new B();
AClass<B> ac = new AClass<B>();
ac.amethod(f);

f は型ですaninterfaceが、パラメーターは型 'E' です。

これができない場合、ジェネリックのどの点がわかりませんか?

4

2 に答える 2

2

引数としてAClass<B>.amethod()aが必要なためです。Bしかし、あなたはそれを渡していますaninterface

于 2012-07-14T21:49:52.443 に答える
2

参照 は、 typeではなくtypefであると宣言されていることに注意してください。実行時の参照は type のインスタンスを指しているという事実にもかかわらず、コンパイラはここで参照の宣言された型とによって要求された型の間のアラインメントのみを探します。aninterfaceBfBfBAClass#amethod(E)

代わりにこれを書くつもりだったのではないでしょうか?

final aninterface f = new B();
final AClass<? super aninterface> ac = new AClass<aninterface>();
ac.amethod(f);

それとも代わりにこれ?

final B f = new B();
final AClass<? super B> ac = new AClass<B>();
ac.amethod(f);

B繰り返しますが、 aは ですが、aninterfaceその逆ではないことに注意してください: ananinterfaceは a ではありませんBaninterfaceしたがって、 typeのパラメーターを要求するメソッドに type の参照を提供することはできませんB

于 2012-07-14T21:57:59.263 に答える