今天早些时候,当我调试一些代码时,我大吃一惊,发现下面这样的代码没有抛出编译时异常:
public Test () {
HashMap map = (HashMap) getList();
}
private List getList(){
return new ArrayList();
}
可以想象,ClassCastException
是在运行时抛出的,但是有人能解释一下为什么在编译时将List
转换为HashMap
是合法的吗?
发布于 2009-09-29 22:38:11
因为可以想象,getList()
可能会返回同样实现List
的HashMap
的子类。不太可能,是的,但有可能,因此是可编译的。
发布于 2009-09-29 22:38:21
首先,List是一个接口。没有理由不存在HashMap的子类,它也实现了List接口。在这种情况下,它将是完全有效的。
https://stackoverflow.com/questions/1495308
复制相似问题