2012-08-13 81 views
28

要deserialise JSON字符串類別的列表,在列出的不同的方式StackOverflow question傑克遜 - Deserialising JSON串 - TypeReference VS 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後,兩者都調用相同的反序列化功能,所以唯一的區別是處理泛型類型的方式。

第二個是完全靜態的,所以在編譯類型中必須知道類型,並且不能改變。所以它類似於使用基本的類文字。

第一個是動態的,所以它可以用來構造不同參數化的東西。我個人更喜歡所有情況下的第一個選擇(它避免了創建一個更多的匿名內部類),但是第二個可能更具可讀性。