gpt4 book ai didi

json - 将字符串集合的强制类型转换为 Groovy 中的枚举集合

转载 作者:行者123 更新时间:2023-12-01 06:26:50 25 4
gpt4 key购买 nike

在我想从 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 是否支持传播类型强制的更智能方式。

最佳答案

我目前不知道更好的方法。我们可以为 JsonSlurper 结果编写一个外部访问者类型的处理器,但这将是更多的代码

关于json - 将字符串集合的强制类型转换为 Groovy 中的枚举集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27545237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com