4
JSON을 도메인 객체로 구문 분석하려는 경우 열거 형 컬렉션을 포함하도록 정의 했으므로 Groovy가 컬렉션의 내용을 강제 변환하지 않는다는 것을 알았습니다 자동으로 제네릭은 컴파일 타임의 문제이므로 예상하지 말아야한다.Groovy의 열거 형 컬렉션으로 문자열 모음 강제 변환
구문 분석 된 JSON에 강제로 형식을 지정하면 런타임에 컬렉션에 문자열이 포함되어 값과 상관없이 컬렉션 요소와 열거 형을 비교하지 못하게됩니다.
대체 방법은 enum 컬렉션에 대한 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
재정의 세터 방식
내 문제를 해결하지만, 약간의 바닐라 있다는 것, 그리고 그루비는 타입 강제 변환을 전파하는 현명한 방법을 지원하는 경우 궁금 해서요.
죄송합니다. 실수를했습니다 ... 답변을 변경했습니다. – blackdrag