2012-08-13 12 views
28

Aby deserialise JSON ciąg do listy klasy, różne sposoby wymienione w StackOverflow questionJackson - Deserialising JSON ciąg - TypeReference vs TypeFactory.constructCollectionType

Type 1 (docs link):

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

Type 2 (docs link):

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

Mimo że oba powyższe 2 typy wykonują zadanie, jaka jest różnica między tymi implementacjami ?

Odpowiedz

29

Po utworzeniu JavaType, oba wywołania tej samej funkcji deserializacji, więc jedyną różnicą jest sposób obsługi rodzaju ogólnego.

Drugi jest w pełni statyczny, więc typ musi być znany w rodzaju kompilacji i nie może się różnić. Jest więc podobny do używania podstawowego dosłownego języka.

Pierwsza z nich jest dynamiczna, więc można jej używać do konstruowania elementów różniących się parametryzacją.

Osobiście wolę pierwszą alternatywę dla wszystkich przypadków (unika się tworzenia kolejnych anonimowych klas wewnętrznych), ale druga może być bardziej czytelna.