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 commented一样,这是更改JLS-JDK-8166326 : 5.2: Allow widening before unboxing的提案,该提案自Java-9开始生效。在报告中,它提到:

此行为对于与捕获的互操作性特别重要各种现有程序希望能够将List<? extends Integer>的元素视为整数。

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)