5

以下のエラーが発生する理由を理解するのに苦労しています。1番がOKなら、2番がダメなのはなぜ?

public interface IFoobar<DATA extends IFoobar> {
    void bigFun();
}

class FoobarImpl<DATA extends IFoobar> implements IFoobar<DATA> {
    public void bigFun() {
        DATA d = null;
        IFoobar<DATA> node = d;    //#1 ok
        d = node;                  //#2 error
    }
}
4

2 に答える 2

9

DATAは のタイプですが、その逆ではないためですIFoobar。それは以下と違いはありません:

String d = null;
Object o = d;                //#1 ok
d = o;                       //#2 error
于 2012-04-18T03:40:56.097 に答える
5

コンパイラは、DATA型が実装していることを知っているためIFoobarです。しかし、すべてのオブジェクトが実際にオブジェクトであることを認識しているわけではありません。単にジェネリック パラメーターとして持つだけでは、何の意味もありません。を実装する別の無関係なクラスを実装することもできます。IFoobarDATADATAIFoobar<DATA>

于 2012-04-18T03:41:38.607 に答える