为什么`++`增加Groovy中的final字段?

奥斯卡

今天,我在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章