不一致的处理;“最后的”;Groovy闭包中使用的修饰符
我在当前稳定的Groovy(v3.0.7)中看到了对“final”修饰符的不同处理:检查条件并设置final变量的相同代码块在常规代码中工作良好,在闭包中使用时失败 例如:不一致的处理;“最后的”;Groovy闭包中使用的修饰符,groovy,Groovy,我在当前稳定的Groovy(v3.0.7)中看到了对“final”修饰符的不同处理:检查条件并设置final变量的相同代码块在常规代码中工作良好,在闭包中使用时失败 例如: public List<Integer> test(String argument) { final value1 if (argument == 'A') { value1 = 1 } else { value1 = 2 } [1
public List<Integer> test(String argument) {
final value1
if (argument == 'A') {
value1 = 1
} else {
value1 = 2
}
[1, 2].collect { i ->
final value2
if (argument == 'A') {
value2 = 1 // <-- error
} else {
value2 = 2
}
i + value2
}
}
test('A')
我是否遗漏了什么,或者这是Groovy的一个问题
当“if”块替换为三值运算符时,代码起作用:
final value2 = argument == 'A' ? 1 : 2
这似乎证实了这是Groovy bug
我已经用其他版本进行了测试:
- 2.4.7、2.4.12-工程
- 2.5.3、2.5.11-失败
- 我相信Groovy就是这样
在中,Paul King回答了一个问题(“为什么它使用2.4.x?”):关于最终变量分析器(FVA):
FVA是一个2.5版本的功能!在2.4中,只有基本的检查,Groovy忽略了许多违规行为。我们目前在2.5实现中有一些误报,尽管我们需要消除这些误报
我相信Groovy就是这样
在中,Paul King回答了一个问题(“为什么它使用2.4.x?”):关于最终变量分析器(FVA):
FVA是一个2.5版本的功能!在2.4中,只有基本的检查,Groovy忽略了许多违规行为。我们目前在2.5实现中有一些误报,尽管我们需要消除这些误报
final value2 = argument == 'A' ? 1 : 2