ホームページ >Java >&#&チュートリアル >ジェネリック型の逆シリアル化中の型消去を解決するために Jackson をどのように使用できますか?

ジェネリック型の逆シリアル化中の型消去を解決するために Jackson をどのように使用できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 09:26:02608ブラウズ

 How Can Jackson Be Used to Resolve Type Erasure During Deserialization of Generic Types?

Jackson およびジェネリック型リファレンス: 逆シリアル化における型消去の解決

複雑なシナリオでは、JSON データを MyRequest< を期待するジェネリック メソッドに逆シリアル化しようとしています。 ;T>タイプ。ただし、Jackson は Java の型消去が原因で、ジェネリック型 T が実行時に保持されないという問題に遭遇しました。その結果、Jackson はネストされた MyRequest を処理します。

この問題を解決し、T として返される予定の型を指定するには、Jackson に明示的にタイプ情報。これは、getTypeFactory() メソッドとconstructCollectionType() メソッドを使用して JavaType オブジェクトを構築することで実現できます。

<code class="java">JavaType type = mapper.getTypeFactory()
  .constructCollectionType(List.class, Foo.class);</code>

List.class を、逆シリアル化する予定のリストのタイプ (例: List) に置き換えます。 。クラス)。 Foo.class を、リスト内の要素の予想されるタイプ (例: Customer.class) に置き換えます。

JavaType オブジェクトを取得したら、それを使用して JSON データを予想されるジェネリック タイプに逆シリアル化できます。

<code class="java">List<Foo> list = mapper.readValue(new File("input.json"), type);</code>

この明示的な型情報を Jackson に提供すると、ネストされた MyRequest が正しく逆シリアル化されます。 getMyObject().

を呼び出したときに実際の T オブジェクトを返します。

以上がジェネリック型の逆シリアル化中の型消去を解決するために Jackson をどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。