Rumah  >  Artikel  >  Java  >  Bagaimana Mengendalikan Pemadaman Jenis dalam Kaedah Generik Apabila Menggunakan Jackson dengan Rujukan Jenis?

Bagaimana Mengendalikan Pemadaman Jenis dalam Kaedah Generik Apabila Menggunakan Jackson dengan Rujukan Jenis?

Susan Sarandon
Susan Sarandonasal
2024-10-25 21:18:03976semak imbas

How to Handle Type Erasure in Generic Methods When Using Jackson with Type References?

Jackson dan Rujukan Jenis dalam Kaedah Generik

Apabila menggunakan Jackson untuk bersiri dan penyahsirilan dalam kaedah generik, adalah mungkin untuk menghadapi masalah pemadaman jenis yang membawa kepada kepada tingkah laku yang tidak dijangka.

Pertimbangkan kod berikut di mana kaedah penguji cuba mendapatkan semula objek permintaan generik daripada rentetan JSON menggunakan rujukan jenis generik:

<code class="java">public MyRequest<T> tester() {
    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>();
    MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
    return requestWrapper.getRequest();
}</code>

Isu berlaku apabila getMyObject () kaedah dipanggil dalam objek permintaan:

<code class="java">@NotNull
@JsonIgnore
public T getMyObject() {
    return myobjects.get(0);
}</code>

Jackson mentafsirkan jenis generik T sebagai Objek, menghasilkan nilai pulangan menjadi LinkedHashMap apabila kaedah getMyObject() digunakan.

Untuk menyelesaikan kekaburan ini, adalah perlu untuk menyatakan secara eksplisit jenis kelas sebenar untuk T. Ini boleh dicapai dengan menyediakan objek Kelas sebagai hujah kepada TypeReference:

<code class="java">public MyRequest<T> tester() {
    TypeReference<MyWrapper<T>> typeRef = new TypeReference<MyWrapper<T>>() {};
    MyWrapper<T> requestWrapper = (MyWrapper<T>) JsonConverter.fromJson(jsonRequest, typeRef);
    Type type = typeRef.getType(); // Retrieve the actual type from the TypeReference
    return requestWrapper.getRequest(type);
}</code>

Dengan memperkenalkan pembolehubah jenis, ia adalah mungkin untuk mengarahkan Jackson untuk menyahsiri Objek JSON berdasarkan maklumat jenis yang ditentukan, memberikan tingkah laku yang lebih tepat dan boleh diramal.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Pemadaman Jenis dalam Kaedah Generik Apabila Menggunakan Jackson dengan Rujukan Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn