今天早些时候,我在调试一些代码时发现类似下面的内容并没有引发编译时异常,我吃了一惊:
public Test () {
HashMap map = (HashMap) getList();
}
private List getList(){
return new ArrayList();
}
您可以想象,在运行时抛出ClassCastException
,但有人可以解释为什么在编译时将List
转换为HashMap
被认为是合法的吗?
答案 0 :(得分:29)
因为可以想象getList()
可以返回HashMap
的子类,它也实现了List
。不太可能,是的,但可能,因此可编辑。
答案 1 :(得分:17)
一件事List是一个界面。没有理由不存在HashMap的子类,它也实现了List接口。在这种情况下,它将是完全有效的。