我很难理解为什么会发生以下错误.如果#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
}
}
Run Code Online (Sandbox Code Playgroud)
因为DATA是一种类型IFoobar,但不是相反.它没有什么不同:
String d = null;
Object o = d; //#1 ok
d = o; //#2 error
Run Code Online (Sandbox Code Playgroud)
因为编译器知道该DATA类型实现IFoobar.但它并不知道所有IFoobar对象实际上都是DATA对象.简单地DATA作为通用参数并不意味着什么; 你也可以实现另一个实现的无关类IFoobar<DATA>.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |