java - 从 List<Optional> 转换为 List<Optional<?>> 是否安全?

标签 java generics

如果您在 Java 中有原始类型,您可以使用无限通配符安全地将其分配/强制转换为同一类型。例如 List可以安全地转换为 List<?> ,这消除了它的原始性质,并允许您以安全(类型检查)的方式使用它1

另一方面,Java 不允许您从 List 进行转换本身用原始类型参数化,比如List<Optional>到具有无限通配符的相同类型参数的列表,例如 List<Optional<?>> .

你仍然可以通过一直下降原始 List 来做到这一点并再次备份(隐含地通过分配):

List<Optional> rawOptionalList = null;
List<Optional<?>> wildcardOptionalList = (List)rawOptionalList;

当然,这会触发有关未经检查的转换(从 ListList<Optional<?>> )的警告。

在我看来,这种转换是安全的:不是 List<Optional<?>>List<Optional> 一样安全与类型转换原始 Optional 的方式相同到Optional<?>安全吗?


1 ... 但您永远无法向此列表添加任何内容,因为没有任何内容与 ? 的捕获匹配对于 add(?)方法。这就是您为安全付出的代价。

最佳答案

是的,这是安全的。通用检查仅在编译时进行。

关于java - 从 List<Optional> 转换为 List<Optional<?>> 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660823/

相关文章:

Java 泛型 : Error when using innerclass

java - 如何创建一个 T 类型的新对象

java - Struts 2 中 Java 类内部的验证

java - Android:我可以将全局变量放入 BroadCastReceiver 中吗?

java - 在java struts中动态更改表页面大小

java - 在 Java 泛型声明中使用 'or'

java - 同一子网中具有多个地址的 UDP 服务器

java - (Java) 将十进制数转换为具有设定位数的二进制数

java - 为什么类型转换在 Java 中不起作用

generics - 为什么我不能在通用枚举类上调用 .values() ?