为什么编译?
今天早些时候,我在调试一些代码时发现像下面这样的东西没有抛出编译时exception,我吃了一惊:
public Test () { HashMap map = (HashMap) getList(); } private List getList(){ return new ArrayList(); }
可以想象,在运行时抛出了ClassCastException
,但有人可以解释为什么在编译时将List
转换为HashMap
被认为是合法的吗?
因为可以想象getList()
可以返回HashMap
的子类,它也实现了List
。 不太可能,是的,但可能,因此可编译。
一方面,List是一个接口。 没有理由不存在HashMap的子类,它也实现了List接口。 在这种情况下,它将是完全有效的。
- 为什么List 在编译和执行时吸收not-type元素?
- 什么可能导致套接字ConnectException:连接超时?
- Liferay ClassNotFoundException:DLFileEntryImpl
- 运行axis2客户端版本1.5
- 如何使用失败的xsdvalidation获取xml文件的元素和无效的xml文件
- Android列表视图数组索引超出界限 – 没有线索?
- com.microsoft.sqlserver.jdbc.SQLServerException:索引2超出范围:(
- Java正则表达式错误 – 没有组1
- 为什么在Linux上使用Java Attach API会失败? (即使maven构建完成)