为什么Javac允许某些不可能的类型转换而不允许其他类型的转换?

问题描述 投票:8回答:2

[如果我尝试将String强制转换为java.util.Date,则Java编译器会捕获该错误。那么,为什么编译器不将以下内容标记为错误?

List<String> strList = new ArrayList<>();                                                                      
Date d = (Date) strList;

当然,JVM在运行时会抛出ClassCastException,但编译器不会对其进行标记。

与javac 1.8.0_212和11.0.2的行为相同。

java casting compiler-errors javac
2个回答
17
投票

从技术上讲,演员阵容是可能的。 javac不能轻易证明它不是您所需要的,并且JLS实际上将其定义为有效的Java程序,因此不允许抛出错误。


1
投票
让我们考虑一下您的示例的概括:
© www.soinside.com 2019 - 2024. All rights reserved.