Groovy属性迭代
发布时间:2020-12-14 16:37:56 所属栏目:大数据 来源:网络整理
导读:在下面的Groovy代码中,将Foo实例的feck,ass,drink属性的值替换为Foo2的实例的值 class Foo { def feck = "fe" def arse = "ar" def drink = "dr" }class Foo2 { def feck = "fe2" def arse = "ar2" def drink = "dr2"}def f = new Foo()def f2 = new Foo2
在下面的Groovy代码中,将Foo实例的feck,ass,drink属性的值替换为Foo2的实例的值
class Foo { def feck = "fe" def arse = "ar" def drink = "dr" } class Foo2 { def feck = "fe2" def arse = "ar2" def drink = "dr2" } def f = new Foo() def f2 = new Foo2() ["feck","arse","drink"].each {it -> f."$it" = f2."$it" } 有没有更好的方法来做到这一点?我对上述代码的具体关注是,属性名称作为字符串存储在列表中,当(例如)使用重构IDE更改这些属性名称之一时,这可能会被错过。 解决方法
我还没有找到一个排除只读属性(即,metaClass,class)的好方法,但是如果要设置Foo实例中也在Foo2实例中的所有属性的值,您可以执行以下。
class Foo { def feck = "fe" def arse = "ar" def drink = "dr" } class Foo2 { def feck = "fe2" def arse = "ar2" def drink = "dr2" } def f = new Foo() def f2 = new Foo2() f2.properties.each { prop,val -> if(prop in ["metaClass","class"]) return if(f.hasProperty(prop)) f[prop] = val } assert f.feck == "fe2" assert f.arse == "ar2" assert f.drink == "dr2" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |