2014-02-15 26 views
0

給定兩個POJO類這樣的:如何合併Groovy中的POJO實例?

class UserA { 
    String name 
    String surname 
    Integer age 
} 

class UserB { 
    String name 
    String surname 
    String email 
} 

和相關實例:

usera = new UserA(name:'john', surname:'smith', age:20) 
userb = new UserB(name:'mark', surname:'almond', email:'[email protected]') 

如何合併 「用戶A」 和 「用戶B」(用戶A < - 用戶B),以獲得 「用戶A」 像這個:

assert usera.name == 'mark' 
assert usera.surname == 'almond' 
assert usera.age == 20 
assert usera.email == '[email protected]' 

通常我想從其他實例添加缺少的屬性和值,並覆蓋對象中已有的屬性值。

回答

4

屬性添加從B到A的metaClass使用:

class UserA { 
    String name 
    String surname 
    Integer age 
} 

class UserB { 
    String name 
    String surname 
    String email 
} 

usera = new UserA(name:'john', surname:'smith', age:20) 
userb = new UserB(name:'mark', surname:'almond', email:'[email protected]') 

userb.properties.each { 
    usera.metaClass[it.key] = it.value 
} 


assert usera.name == 'mark' 
assert usera.surname == 'almond' 
assert usera.age == 20 
assert usera.email == '[email protected]'