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

时间:2014-08-07 18:02:58

标签: groovy

今天,我在Groovy中遇到了一个特殊的问题/功能。 看起来可以使用Groovy中的++运算符来增加最终字段。

它看起来像是一个错误吗?这种行为与我对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

1 个答案:

答案 0 :(得分:4)

  

你觉得它看起来像个错误吗?

是。如果您愿意,可以在https://jira.codehaus.org/browse/GROOVY提交JIRA,我们可以查看。