我已经使用Spock framework在Groovy
中编写了简单的测试
class SimpleSpec extends Specification {
def "should add two numbers"() {
given:
final def a = 3
final b = 4
when:
def c = a + b
then:
c == 7
}
}
变量a
是使用def
和final
关键字组合声明的。变量b
仅使用final
关键字声明。
我的问题是:这两个声明之间有什么区别(如果有的话)?一种方法应该优先于另一种方法吗?如果是的话,原因何在?
2条答案
按热度按时间xwmevbvl1#
在方法中声明的最终变量被当作groovy中的普通变量处理
检查下面的类和groovy(2.4.11)生成的类
PS:可能Spock中的
given:
部分以不同的方式生成代码...z9smfwbn2#
用户Daggett是正确的,
final
不会在Groovy中创建局部变量FINAL。关键字只对类成员有影响。下面是一个小插图:当我将我的一个Spock项目切换到带有Groovy 2.5的1.3版时,注意到由于编译器检测到对最终局部变量的重新赋值,该测试现在不再编译。也就是说,Groovy<=2.4中的不一致似乎已经修复。