栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java强制转换运算符如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java强制转换运算符如何工作?

JLS是否足够好?

强制转换将应用于强制转换操作符的操作数(第15.16节):操作数表达式的类型必须转换为强制转换操作符显式命名的类型。铸造上下文允许使用:

  • 身份转换(第5.1.1节)
  • 不断扩大的原始转换(第5.1.2节)
  • 缩小的原始转换(第5.1.3节)
  • 扩展参考转换(第5.1.5节)(可选),然后是未经检查的转换(第5.1.9节)
  • 变窄的引用转换(第5.1.6节),然后可以选择进行未经检查的转换
  • 拳击转换(第5.1.7节)
  • 拆箱转换(第5.1.8节)。

实际上,也许这部分更相关:

将编译时参考类型 S 的值转换为编译时参考类型 T的 转换时编译时合法性的详细规则如下:

  • 如果 S 是类类型:

    • 如果 T 是类类型,则| S | <:| T |或| T | <:| S |;
      否则会发生编译时错误。此外,如果存在的超类型 XŤ ,和超类型 ÿ小号 ,使得两个 Xÿ
      是可证明不同参数化类型(§4.5),并且的擦除 Xÿ 是相同的,编译时发生错误。
    • 如果 T 是接口类型:
    • 如果 小号 不是
      final
      类(§8.1.1),然后,如果存在的超类型 XŤ ,和超类型 ÿ小号
      ,使得两个 Xÿ 是可证明不同参数化类型,那的擦除 XY 相同,则发生编译时错误。否则,强制转换在编译时始终合法(因为即使
      S 不实现 TS 的子类也可能实现)。
    • 如果 S 是一个

      final
      类(第8.1.1节),则 S 必须实现 T ,否则会发生编译时错误。

    • 如果 T 是类型变量,则使用 T 的上限代替 T 递归地应用此算法。

    • 如果 T 是数组类型,则 S 必须是class
      Object
      ,否则会发生编译时错误。
    • 如果 S 是接口类型:
    • 如果 T 是数组类型,则 T 必须实现 S ,否则会发生编译时错误。
    • 如果 Ť 是一个类型不
      final
      (§8.1.1),然后,如果存在的超类型 XŤ ,和超类型 ÿ小号
      ,使得两个 Xÿ 是可证明不同参数化类型,那的擦除 XY 相同,则发生编译时错误。否则,强制转换在编译时始终合法(因为即使
      T 不实现 ST 的子类也可能实现)。
    • 如果 T 是的类型
      final
      ,则:
    • 如果 S 不是参数化类型或原始类型,则 T 必须实现 S ,并且在静态上知道强制转换正确,否则会发生编译时错误。
    • 否则, S 是调用某些通用类型声明 G 的参数化类型,或者是对应于通用类型声明 G 的原始类型。然后必须存在一个超类型
      XŤ ,使得 X 是的调用 ģ ,或发生编译时间错误。此外,如果 SX
      是可证明是不同的参数化类型,则将发生编译时错误。
    • 如果 S 是类型变量,则使用 S 的上限代替 S 递归地应用此算法。
    • 如果 S 是数组类型 SC [],即,数组类型为 SC 的组件:
    • 如果 T 是一个类类型,则如果 T 不是 一个类类型,
      Object
      则会发生编译时错误(因为这
      Object
      是可以分配数组的唯一类类型)。
    • 如果 T 是接口类型,则除非 T 是类型
      java.io.Serializable
      或type
      Cloneable
      ,否则会发生编译时错误 ,这是由数组实现的唯一接口。
    • 如果 T 是类型变量,则:
    • 如果 T 的上限是
      Object
      或type
      java.io.Serializable
      或type
      Cloneable
      ,或者可以通过递归应用这些规则将 S 合法地强制转换为类型变量,则该强制转换是合法的(尽管未选中)。
    • 如果 T 的上限是数组类型 TC [] ,则发生编译时错误,除非可以通过递归应用这些编译时规则来将类型 SC []
      强制转换为 TC []
    • 否则,将发生编译时错误。
    • 如果 T 是一个数组类型 TC [],即一个类型为 TC 的组件的数组,那么除非满足以下条件之一,否则发生编译时错误:
    • TCSC 是相同的原始类型。
    • TCSC 是引用类型,可以通过递归应用这些编译时规则来将类型 SC 强制转换为 TC

现在完全清楚了,不是吗?:D

换句话说,这是我不知道有关您的问题的更多详细信息所能做的最好的事情。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号