如何制作Groovy ConfigObject的深层副本?我看到我可以使用.clone()创建对象的浅表副本,但我想制作一个完整的深层副本。
答案 0 :(得分:3)
@ HappyCoder86答案的问题是它假设所有配置键/值都是字符串。如果你的一些配置值是对象/闭包(在grails中常见),那么解决方案将无法工作。
下面的解决方案可能很慢但如果你的类型为字符串
,则可以使用 static def deepcopy(ConfigObject orig) {
ConfigObject copy = new ConfigObject()
orig.keySet().each { key ->
def value = orig.get(key)
if (value instanceof ConfigObject) {
value = deepcopy(value)
}
copy.put(key, value)
}
return copy
}
答案 1 :(得分:0)
ConfigObject config = new ConfigSlurper().parse originalConf.toProperties()
答案 2 :(得分:0)
ConfigObject clonedConfigObject = new ConfigSlurper().parse("${originalConfigObject.prettyPrint()}")
不适用于具有Class或Closure值类型的条目。 但是可以与列表和地图一起使用。