【发布时间】:2021-12-14 18:55:21
【问题描述】:
考虑以下 sn-p:
Integer a = Integer.valueOf(23);
Double d = (Double) (Number) a; //not unchecked cast
List<String> stringList = new ArrayList<>();
List<Integer> integerList = (List<Integer>)(List<?>)stringList; //unchecked cast
- 据我了解 - 每当我们转换
Supertype -> Subtype时,都会标记未经检查的强制转换,因为编译器直到运行时才知道Supertype表示的类型是否会匹配SubType。 - 那么在这里 - 为什么
(Double) (Number)a没有被标记为Unchecked Cast?
【问题讨论】:
-
"编译器直到运行时才知道" 稍后会知道,甚至根本不会知道。
-
@Sweeper :我的意思是一样的——直到运行时 java 系统才知道转换是否兼容——如果不兼容,那么它将被标记为 RuntimeException。跨度>
-
@user16320675 : 是的 .. 这是真的 - 那么你如何定义“未经检查的”演员?
-
@user16320675 :好的 - 那么这个怎么样:
Integer a = Integer.valueOf(23);Class dd = (Class) (Object) a; //not unchecked cast -
@user16320675 :或者更确切地说是我上面粘贴的示例 - 你的意思是运行时会很乐意在运行时允许
List<String> -> List<?> -> List<Integer>吗?
标签: java generics jls unchecked unchecked-cast