我应该能够修改这个最终属性吗?书说我应该但是我收到了错误

时间:2011-11-13 00:51:50

标签: groovy

Groovy noob在这里,我正在完成我的第一本Groovy书,它有示例代码,大致说明

“如果我想要一个属性为ready-only属性,那么将其声明为final。这不是定义final字段而是只读属性 - 您可以在实例中更改属性定义类的方法,但不是来自外部“

以下是我所涉及的代码,但我一直收到错误说明:

cannot modify final field 'miles' outside of constructor.

代码:

class Car
{
    final miles = 0

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

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

}

这本书说我应该可以在miles实例方法中修改drive,我做错了吗?

1 个答案:

答案 0 :(得分:2)

我认为他们的意思(不确定他们说的是什么,如果你是释义)是没有定义setter方法,所以不能从课外修改。

,但仍然是final属性,这意味着它不能在其集合中被修改,这将在构造函数中或在声明期间。

Property and field rules

也就是说,请看这两个问题:16282752,因此可能需要进行更多探索,尽管这似乎仅限于本地脚本属性。

我的猜测是你使用的是1.7+ Groovy,而本书的目标是< = 1.6。

另见this SO question