[如果我尝试将String
强制转换为java.util.Date
,则Java编译器会捕获该错误。那么,为什么编译器不将以下内容标记为错误?
List<String> strList = new ArrayList<>();
Date d = (Date) strList;
当然,JVM在运行时会抛出ClassCastException
,但编译器不会对其进行标记。
与javac 1.8.0_212和11.0.2的行为相同。
从技术上讲,演员阵容是可能的。 javac不能轻易证明它不是您所需要的,并且JLS实际上将其定义为有效的Java程序,因此不允许抛出错误。