【发布时间】:2011-05-18 12:01:01
【问题描述】:
有人可以向我解释一下为什么以下代码示例中标记为//this line gives a compile error (why?) 的行不起作用吗?
import java.util.ArrayList;
public class GenericCastCheck {
class A{
}
class B extends A{
}
public static void main(String[] args) {
A aObject = new A();
B bObject = new B();
//this line works fine
aObject = bObject;
//this line gives a compile (expected)
bObject = aObject;
ArrayList<A> aList = new ArrayList<A>();
ArrayList<B> bList = new ArrayList<B>();
//this line gives a compile error (why?)
aList = bList;
//this line gives a compile error (expected)
bList = aList;
}
}
具体来说,当我们说bList 是ArrayList<B> 类型时,不是说它的每个元素都是B 的一个实例吗?如果是这样,那么将其转换为 ArrayList<A> 有什么问题,如果我们可以将 B 的单个实例转换为 A?
谢谢。
【问题讨论】: