Groovy中将字符串集合强制转换为枚举集合

4
在我想要将JSON解析为包含枚举集合的领域对象时,我发现Groovy不会自动强制转换集合的内容,这也许是可以预料的,因为泛型是一个编译时的关注点。如果我对解析后的JSON进行类型强制转换,那么我的集合在运行时将包含字符串,无论其值如何,都会导致与枚举元素的比较失败。另一种选择是覆盖枚举集合的setter并对每个元素进行强制转换。下面的示例说明了这一点。
import groovy.json.*

enum Hero {
    BATMAN, ROBIN
}

class AClass {

    Collection<Hero> heroes
}

class BClass {

    Collection<Hero> heroes

    void setHeroes(Collection heroes){
        this.heroes = heroes.collect { it as Hero }
    }
}

class CClass {

    AClass a
    BClass b
}

def json = '''
    {
        "a":
        {
            "heroes":["BATMAN", "ROBIN"]
        },
        "b":
        {
            "heroes":["BATMAN", "ROBIN"]
        }
    }

'''

def c = new JsonSlurper().parseText(json) as CClass

assert c.a.heroes[0].class == String
assert c.b.heroes[0].class == Hero 

覆盖setter方法的方式解决了我的问题,但似乎这种方法有些朴素,我在想Groovy是否支持更智能的类型转换传播方式。

1个回答

0

目前我不知道更好的方法。我们可以为JsonSlurper结果编写一个外部访问器处理器,但那需要更多的代码。


对不起,我犯了一个错误... 我改变了答案。 - blackdrag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接