在Grails中,如何判断对象是否是瞬态的?

Dan*_* T. 3 grails groovy

我在Grails中有一段代码:

def product = Product.get(5) ?: new Product()
product.isDiscounted = product.isDiscounted ?: true
Run Code Online (Sandbox Code Playgroud)

问题是,如果isDiscounted已经为现有产品设置了属性并且它是假的,我最终会将其更改为true.是否可以检查物体是否是瞬态的?

Bur*_*ith 5

在这种情况下,使用属性Boolean代替boolean,然后初始值将是null而不是默认值false.这也有助于验证,因为您可以验证选择false是故意的,而不仅仅是允许默认值.

通常,您可以使用isAttached()方法(或属性样式变体attached),例如

def product = Product.get(5) ?: new Product()
product.isDiscounted = product.attached ? product.isDiscounted ? true
Run Code Online (Sandbox Code Playgroud)

实际上,使用构造函数中的默认值可以更紧凑地完成此情况:

def product = Product.get(5) ?: new Product(discounted: true)
Run Code Online (Sandbox Code Playgroud)