Rumah >Java >javaTutorial >Bagaimana Mengendalikan Pemadaman Jenis dalam Kaedah Generik Apabila Menggunakan Jackson dengan Rujukan Jenis?
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!