3

我在 Grails 中有一段代码:

def product = Product.get(5) ?: new Product()
product.isDiscounted = product.isDiscounted ?: true

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

4

1 回答 1

5

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

一般来说,尽管您可以使用该isAttached()方法(或属性样式变体attached),例如

def product = Product.get(5) ?: new Product()
product.isDiscounted = product.attached ? product.isDiscounted ? true

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

def product = Product.get(5) ?: new Product(discounted: true)
于 2012-05-17T18:57:55.467 回答