2012-05-17 1 views
3

속성이 null이 아닌 경우 Grails를 사용하여 도메인 클래스의 속성을 설정합니다. 현재 코드는 다음과 같습니다.객체가 null 인 경우 Groovy에서 객체의 속성을 설정하는이 코드를 어떻게 단순화합니까?

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" 
} 

너희들은 내가 무엇을 할 것을 권장 것입니까?

product.with { 
    Name = Name ?: "Default Produce" 
    Price = Price ?: 5 
    Type = Type ?: "Shampoo" 
} 

답변

5

는 마지막 예에서 with 메서드 호출을 사용

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

setDefaults(product, [Name: 'Default Product', Price: 5, Type: 'Shampoo']) 
0

경우 반드시 간단하지만, 어쩌면 다시 사용할 수 없습니다 :

관련 문제