首页 > 解决方案 > Java SE 11 - Java 语言规范中类型转换的新案例

问题描述

Java SE 11 的JLS §5.2包含一些 Java 8 的 JLS 没有的新类型转换案例,请参见列表中的第 4 项和第 5 项:

赋值上下文允许使用以下之一:

  1. 身份转换
  2. 扩大的原始转换
  3. 扩大参考转换
  4. 扩大参考转换,然后进行拆箱转换
  5. 一个扩大的参考转换,然后是一个拆箱转换,然后是一个扩大的原始转换
  6. 拳击转换
  7. 拳击转换,然后是扩大的参考转换
  8. 拆箱转换
  9. 拆箱转换,然后是扩大的原始转换

我不明白列表中的案例 4案例 5。谁能用例子给我一些解释?如果可能的话,还请解释一下它的实际用法。


更新:

正如@Naman评论的那样,这是更改 JLS - JDK-8166326 的建议:5.2:允许在拆箱前扩大范围,这在 Java-9 之后就生效了。在报告中,它提到:

这种行为对于与 capture 的互操作性尤为重要各种现有程序都希望能够将 a 的元素List<? extends Integer>视为整数。

List<? extends Integer> li = null;
int i = li.get(0);

这可能暗示这种JLS的改变确实有实际的必要性。但是我还是不明白为什么<? extends Integer> 很重要。与捕获的互操作性是什么意思,为什么它很重要?这些不同的现有程序是什么样的?它们是 Java 代码吗(我知道其他一些语言也可以在 JVM 上运行,并且可能与 Java 代码有交互)?

标签: javatype-conversionjava-11autoboxingjls

解决方案



推荐阅读