让我们采用以下简单表达式:
((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
1条答案
按热度按时间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,具体取决于您用来测试它的版本。报告它是值得的,即使它是固定的,这样他们就可以编写一个单元测试,以捕捉它在未来,因为它可能会被忽视。