2012-08-13 3 views
28

대 TypeReference이 클래스의 목록에 JSON 문자열을 deserialise하려면에 나열된 다른 방법 StackOverflow question잭슨 - Deserialising JSON 문자열 - TypeFactory.constructCollectionType

유형 1 (docs link) :

List<SomeClass> someClassList = mapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class)); 

2 형 (docs link) :

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { }); 

위의 두 가지 유형 모두에서 작동하지만 이러한 구현 간의 차이점은 무엇입니까? ?

답변

29

JavaType을 구축 한 후에도 둘 모두 동일한 직렬화 해제 기능을 호출하므로 제네릭 유형이 처리되는 유일한 차이점이 있습니다.

두 번째 것은 완전히 정적이므로 유형은 컴파일 유형으로 알려 져야하며 다를 수 없습니다. 따라서 기본 클래스 리터럴을 사용하는 것과 비슷합니다.

첫 번째 매개 변수는 동적이므로 매개 변수화와 관련된 내용을 구성하는 데 사용할 수 있습니다.

개인적으로 나는 모든 경우에 대한 첫 번째 대안을 선호합니다 (익명의 내부 클래스를 하나 더 만드는 것을 피함). 그러나 두 번째 것은 더 읽기 쉽습니다.

관련 문제