2011-11-13 28 views
3

Groovy的小白在这里,我通过我的第一本书Groovy的工作,它有示例代码它规定大致我应该能够修改这最后的属性吗?书说我应该,但我得到一个错误

“如果我想有一个属性是准备-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 } 

} 

书上说我应该能够从drive实例方法中修改miles,我是不是做错了什么?

+0

我正在通过相同的书,并编写相同的代码,并给出了这个问题,感谢张贴! – ericraio

回答

2

我认为他们的意思(不知道他们说了些什么,如果你是释义)是没有定义setter方法,所以它不能从类外部修改。

,但是,仍然是一个final属性,这意味着它不能一次它的设置,这将是一个构造函数或申报期间进行修改。

Property and field rules

尽管如此,看到这两个问题:16282752,让更多的探索可能是必要的,虽然这似乎仅限于本地脚本属性。

我的猜测是您使用的是1.7+ Groovy,而本书的目标是< = 1.6。请参阅this SO question

+0

我可以声明一些类似于:“最后的英里”吗? – ProfessionalAmateur

+0

你提到的这个问题谈论了同一本书和章节。看起来这本书是为<1.6而编写的,我使用1.8来玩。 – ProfessionalAmateur

+0

@ProfessionalAmateur Yep;他们固定它(虽然它花了一两年!) –

相关问题