7

如果您在 grails 项目中有一个域类,您还可以使用 getter 和 setter 来编写或读取它们。

例如域类 Book 具有属性:

String author

在控制器中,您有一本书,并且您想为这本书设置作者:这适用于直接访问属性或 getter 和 setter 方法,尽管它们不在类中。

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

在 groovy & grails 中获取和设置属性的首选方式是什么?

4

2 回答 2

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

于 2012-11-25T02:28:11.100 回答
4

两者之间没有实际区别,因为它们都编译为相同的代码。使用 grails 的好处之一是不必担心 getter 和 setter 样板代码,因此我强烈建议使用以下代码,因为它提高了可读性和生产力:

book.author = "Mike Miller"

于 2012-11-26T06:12:13.500 回答