如何制作Groovy ConfigObject的深层副本?

时间:2015-04-02 18:10:27

标签: groovy

如何制作Groovy ConfigObject的深层副本?我看到我可以使用.clone()创建对象的浅表副本,但我想制作一个完整的深层副本。

3 个答案:

答案 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值类型的条目。 但是可以与列表和地图一起使用。