如果属性不为null,我正在使用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"
}
你们会推荐我做什么?
答案 0 :(得分:5)
使用上一个示例中的with
方法调用:
product.with {
Name = Name ?: "Default Produce"
Price = Price ?: 5
Type = Type ?: "Shampoo"
}
答案 1 :(得分:0)
不确定是否更简单,但可能更容易重复使用:
def setDefaults(obj, Map defaults) {
defaults.each { k, v -> obj[k] = obj[k] ?: v }
}
setDefaults(product, [Name: 'Default Product', Price: 5, Type: 'Shampoo'])