今天,我在Groovy中遇到了相当奇怪的问题/功能。++
在Groovy中,似乎可以使用operator来增加最终字段。
在您看来,它像是个虫子吗?此行为与Java期望的不一致。有谁知道这怎么可能?
我准备了一个小小的Spock测试来找出问题所在。
import spock.lang.Specification
class FinalModifierTest extends Specification {
def 'tests bizarre behaviour of final modifier in Groovy'() {
given:
Adder adder = new Adder()
expect:
adder.number.class == Integer
when:
adder.number = 7
then:
thrown(ReadOnlyPropertyException)
when:
adder.increment()
then:
adder.number == 2
}
}
class Adder {
final int number = 1
void increment() {
number++
}
}
显然,InteliJ通过显示以下消息告知我有关最终字段分配的信息:“无法为最终字段编号分配值”,但是代码仍然可以编译,更糟糕的是,它可以成功执行!
我在上面的示例上运行:
的JVM:1.7.0_51
Groovy:2.2.2
在您看来,它像是个虫子吗?
是。如果您愿意,可以在https://jira.codehaus.org/browse/GROOVY上提交JIRA,我们可以看看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句