/ /なぜ `` ``がGroovyの最後のフィールドをインクリメントするのですか? - グルーヴィーな

なぜ `++`がGroovyの最終フィールドをインクリメントするのですか? - グルーヴィー

今日、私はGroovyでかなり独特の問題/機能に出会いました。 それを使用して最後のフィールドをインクリメントすることが可能であるように見えます ++ Groovyの演算子です。

それはあなたにとってバグのように見えますか?この振る舞いは、私がJavaに期待することと一致しません。 どのようにそれが可能であるかについて誰かが何か考えを持っていますか?

私は問題を特定するために少しスポックテストを用意しました。

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は4

それはあなたにとってバグのように見えますか?

はい。あなたが好きならあなたはでJIRAを提出することができます https://jira.codehaus.org/browse/GROOVY そして私達は見てみることができます。