Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mendapatkan Literal Kelas untuk Jenis Generik di Jawa?

Bagaimanakah Saya Boleh Mendapatkan Literal Kelas untuk Jenis Generik di Jawa?

DDD
Lepaskan: 2024-12-10 05:43:16
asal
545 orang telah melayarinya

How Can I Get Class Literals for Generic Types in Java?

Java: Mendapatkan Kelas Literal untuk Jenis Generik

Generik dalam Java ialah ciri berkuasa yang membolehkan keselamatan jenis pada masa penyusunan. Walau bagaimanapun, pelaksanaannya memperkenalkan cabaran apabila ia datang untuk mendapatkan literal kelas untuk jenis generik.

Masalahnya:

Biasanya, literal kelas diperoleh menggunakan sintaks berikut :

Class<Foo> cls = Foo.class;
Salin selepas log masuk

Tetapi apabila ia datang kepada jenis generik seperti Senarai, komplikasi timbul:

Class<List> cls = List.class // warning: List should be parameterized
Salin selepas log masuk

Menambah kad bebas, , untuk menyamaratakan jenis mengakibatkan ralat tidak padan jenis:

Class<List<?>> cls = List.class // type mismatch
Salin selepas log masuk

Percubaan untuk menentukan parameter jenis sebenar, mis. , Senaraikan, membawa kepada sintaks ralat.

Penyelesaian:

Malangnya, adalah mustahil untuk mendapatkan literal kelas secara statik untuk jenis generik dengan parameter jenis khusus dalam Java. Ini disebabkan oleh proses yang dipanggil penghapusan jenis.

Semasa penyusunan, maklumat jenis generik dialih keluar, hanya meninggalkan jenis mentah. Contohnya, kedua-dua Senarai dan Senaraikan terjemah kepada jenis mentah yang sama: List. Akibatnya, tiada perwakilan masa jalan yang berasingan untuk setiap parameterisasi jenis generik.

Ini bermakna satu-satunya literal kelas yang wujud untuk jenis generik adalah untuk jenis mentah, mis., List.class.

Refleksi dan Pemadaman Jenis:

Manakala pemadaman jenis mengehadkan penggunaan huruf kelas untuk jenis generik, ia tidak menghapuskan sepenuhnya kewujudannya. Kaedah Field.getGenericType() dalam java.lang.reflect menyediakan akses kepada maklumat jenis generik semasa masa jalan. Walau bagaimanapun, kaedah ini terhad kepada introspeksi dan tidak boleh digunakan untuk mendapatkan literal kelas.

Kesimpulan:

Disebabkan pemadaman taip, tidak mungkin untuk mendapatkan literal kelas untuk parameterisasi khusus jenis generik. Literal kelas untuk jenis generik sentiasa mewakili jenis mentah, yang tidak mengekalkan maklumat parameter jenis.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Literal Kelas untuk Jenis Generik di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan