web-dev-qa-db-ja.com

ジャクソン-JSON文字列のデシリアライズ-TypeReference vs TypeFactory.constructCollectionType

JSON文字列をクラスのリストにデシリアライズするには、 StackOverflow question

タイプ1( ドキュメントリンク ):

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

タイプ2( ドキュメントリンク ):

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

上記の2つのタイプは両方とも仕事をしますが、これらの実装の違いは何ですか?

38
Arun

JavaTypeを構築した後、両方とも同じ逆シリアル化機能を呼び出すため、唯一の違いはジェネリック型の処理方法です。

2番目は完全に静的であるため、タイプはコンパイルタイプで認識される必要があり、変更できません。したがって、基本的なクラスリテラルを使用することに似ています。

最初のものは動的であるため、パラメーター化に関してさまざまなものを構築するために使用できます。

個人的には、すべてのケースで最初の選択肢を好みます(もう1つの匿名内部クラスの作成を回避します)が、2番目の方が読みやすいかもしれません。

38
StaxMan