Elvis运算符和Groovy中的类型转换优先级

nnt7mjpx  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(65)

让我们采用以下简单表达式:

((Double) null ?: 0).getClass()

结果如下:

  • Groovy 3:class java.lang.Double
  • Groovy 4:class java.lang.Integer

有谁知道这种不同行为的原因吗?我认为Groovy4是正确的,因为强制转换是在Elvis操作符之前应用的。
已检查,但在Groovy 4发行说明中找不到任何相关内容:https://groovy-lang.org/releasenotes/groovy-4.0.html

i34xakig

i34xakig1#

从文档的优先级?:比typecast低得多。Typecast (type)是1级优先级,elvis操作符?:是14,所以看起来Groovy 4做得对。
https://groovy-lang.org/operators.html#_operator_precedence
在Groovy 3文档中也是这样记录的:
http://docs.groovy-lang.org/docs/groovy-3.0.18/html/documentation/#_operator_precedence
我唯一的解释是Groovy 3中没有被注意到的一个简单的bug,或者可能是在Groovy 3的后续版本中修复的一个bug,具体取决于您用来测试它的版本。报告它是值得的,即使它是固定的,这样他们就可以编写一个单元测试,以捕捉它在未来,因为它可能会被忽视。

相关问题