【发布时间】:2020-07-02 18:45:57
【问题描述】:
如果我尝试将 String 转换为 java.util.Date,Java 编译器会捕获错误。那么为什么编译器不将以下内容标记为错误呢?
List<String> strList = new ArrayList<>();
Date d = (Date) strList;
当然,JVM 在运行时会抛出 ClassCastException,但编译器不会标记它。
行为与 javac 1.8.0_212 和 11.0.2 相同。
【问题讨论】:
-
List没有什么特别之处。Date d = (Date) new Object(); -
我最近一直在玩 arduino。我会喜欢一个编译器,它不会愉快地接受任何转换,然后只是以完全不可预测的结果执行它们。字符串转整数?确定的事!双倍到整数?是的先生!字符串到布尔值?至少那一个大多是错误的......
-
@ElliottFrisch:Date 和 Object 之间有明显的继承关系,但 Date 和 List 之间没有关系。所以我希望编译器标记这个转换,就像它标记从 String 到 Date 的转换一样。但正如 Zabuza 在他们出色的回答中所解释的那样,List 是一个接口,因此如果
strList是实现 List 的类的实例,则强制转换是合法的。 -
这是一个经常出现的问题,我确信我已经看到了多个重复的问题。它基本上是强相关的反向版本:stackoverflow.com/questions/21812289/…
-
@StianYttervik -fpermissive 就是这样做的。打开编译器警告。
标签: java casting compiler-errors javac