この最終的なプロパティを変更できるはずですか?本は私がすべきだと言っているが、私はエラーが出ている

Groovy noobここでは、最初のGroovyの本を使っています。

" final フィールドを定義するのではなく、読み取り専用のプロパティを定義しています。インスタンス内からプロパティを変更することができますクラスを定義するメソッドですが、外部からは取得できません "

ここに問題のコードはありますが、

はコンストラクタの外で最終フィールド 'miles'を変更できません。

コード:

class Car
{
    final miles = 0

    def getMiles()
    {
        println "getMiles called"
        miles
    }

    def drive(dist){if (dist>0) miles += dist }

}

この本では、ドライブインスタンスメソッド内から miles を変更できる必要があると私は間違っていますか?

3
私は同じ本を読んで同じコードを書いていて、この問題を投稿しました。ありがとう!
追加された 著者 ericraio,

1 答え

私は彼らが何を意味したと思うか(あなたが言いたいことを言っているかどうか分からない)というのは、定義されたセッターメソッドがないということです。クラス外から変更することはできません。

しかし、 はまだ final のプロパティです。つまり、コンストラクタや宣言時に一度変更することはできません。

プロパティとフィールドルール

つまり、次の2つの問題を参照してください: 16282752 のように、より多くの探索が必要かもしれませんが、これはローカルのスクリプトプロパティに限られています。

My guess is you're using a 1.7+ Groovy, while the book targets <= 1.6.

こちらのご質問もご覧ください。

2
追加された
def final miles のような宣言はできますか?
追加された 著者 ProfessionalAmateur,
あなたが参照しているその質問は、私が行っている同じ本と章について話しています。この本は<1.6で書かれていて、私は1.8を使って遊んでいるようです。
追加された 著者 ProfessionalAmateur,
@ProfessionalAmateurうん。彼らはそれを修正しました(1年か2年かかりましたが)。
追加された 著者 Dave Newton,