我很难理解为什么会发生以下错误。如果#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
}
}
答案 0 :(得分:9)
因为DATA
是IFoobar
的一种类型,但不是相反。它没有什么不同:
String d = null;
Object o = d; //#1 ok
d = o; //#2 error
答案 1 :(得分:5)
因为编译器知道DATA
类型实现了IFoobar
。但它并不知道所有IFoobar
个对象实际上都是DATA
个对象。简单地将DATA
作为通用参数并不意味着什么;你也可以实现另一个实现IFoobar<DATA>
的无关类。