3

如果属性不为空,我正在使用 Grails 在域类上设置属性。目前,代码如下所示:

def product = Product.getById(5);

if (!product.Name) {
    product.Name = "Default Product"
}
if (!product.Price) {
    product.Price = 5;
}
if (!product.Type) {
    product.Type = "Shampoo"
}

在 Groovy 中实现此代码块的更好方法是什么?我设法将其简化为:

product.Name = product.Name ?: "Default Product"
product.Price = product.Price ?: 5
product.Type = product.Type = "Shampoo"

但我希望能够做这样的事情(无效代码):

product {
    Name = product.Name ?: "Default Product",
    Price = product.Price ?: 5,
    Type = product.Type ?: "Shampoo"
}

你们会建议我做什么?

4

2 回答 2

5

在上一个示例中使用with方法调用:

product.with {
    Name = Name ?: "Default Produce"
    Price = Price ?: 5
    Type = Type ?: "Shampoo"
}
于 2012-05-17T17:54:32.207 回答
0

不确定是否更简单,但可能更可重用:

def setDefaults(obj, Map defaults) {
    defaults.each { k, v -> obj[k] = obj[k] ?: v }
}

setDefaults(product, [Name: 'Default Product', Price: 5, Type: 'Shampoo'])
于 2012-05-17T18:49:34.280 回答