2011-11-13 44 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;他們固定它(雖然它花了一兩年!) –

相關問題