2012-11-25 39 views
6

如果你在grails項目中有一個域類,你也可以使用getter和setter來寫或讀它們。在grails中使用getter和setter?

例如域類書有屬性:

String author 

在控制器,你已經一本書,你要設置的作者這本書: 這適用於直接訪問屬性或getter和儘管他們不在課堂上

book.author = "Mike Miller" 
book.setAuthor("Mike Miller") 

什麼是獲取和設置在常規& Grails的屬性的首選方法是什麼?

回答

15

它們是一樣的。當您擁有一個像String author這樣的非範圍字段時,Groovy編譯器將該字段設置爲私有,併爲其創建一個getter和setter。它不會覆蓋現有的方法,所以您可以定義自己的設置和/或獲取它是否不僅僅是設置和獲取值。

book.author = "Mike Miller"是用於調用setter的Groovy語法糖,就像String authorName = book.author是調用getter的語法糖。要看到這個,編輯這個類並添加一個setter或getter並添加一個println,例如

void setAuthor(String a) { 
    println "Setting author to '$a', was '$author'" 
    author = a 
} 

可以使用反編譯查看生成的代碼 - 我建議JD-GUI,http://java.decompiler.free.fr/?q=jdgui

3

還有就是兩者之間沒有實際的區別,因爲它們都向下編譯成相同的代碼。 對使用​​不不必擔心getter和setter的樣板代碼的Grails的好處,所以我強烈建議下面的代碼,因爲它提高可讀性和效率:

book.author = "Mike Miller"