3

プロパティが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"
}

あなたたちは私に何を勧めますか?

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 に答える