如果您在 Java 中有原始类型,您可以使用无限通配符安全地将其分配/强制转换为同一类型。例如 List
可以安全地转换为 List<?>
,这消除了它的原始性质,并允许您以安全(类型检查)的方式使用它1。
另一方面,Java 不允许您从 List
进行转换本身用原始类型参数化,比如List<Optional>
到具有无限通配符的相同类型参数的列表,例如 List<Optional<?>>
.
你仍然可以通过一直下降原始 List
来做到这一点并再次备份(隐含地通过分配):
List<Optional> rawOptionalList = null;
List<Optional<?>> wildcardOptionalList = (List)rawOptionalList;
当然,这会触发有关未经检查的转换(从 List
到 List<Optional<?>>
)的警告。
在我看来,这种转换是安全的:不是 List<Optional<?>>
与 List<Optional>
一样安全与类型转换原始 Optional
的方式相同到Optional<?>
安全吗?
1 ... 但您永远无法向此列表添加任何内容,因为没有任何内容与 ?
的捕获匹配对于 add(?)
方法。这就是您为安全付出的代价。
最佳答案
是的,这是安全的。通用检查仅在编译时进行。
关于java - 从 List<Optional> 转换为 List<Optional<?>> 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47660823/