我很难理解下面的错误为什么会发生。如果#1可以,那么#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
    }
}

最佳答案

因为DATAIFoobar的一种,但不是相反。没什么不同:

String d = null;
Object o = d;                //#1 ok
d = o;                       //#2 error

10-04 23:46