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

Bagaimanakah Saya Boleh Mendapatkan Literal Kelas daripada Jenis Generik di Java?

DDD
DDDasal
2024-12-13 08:51:11163semak imbas

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

Mendapatkan Literal Kelas daripada Jenis Generik dalam Java

Jenis generik ialah ciri yang berkuasa di Java, menyediakan keselamatan jenis dan kebolehgunaan semula kod. Walau bagaimanapun, percubaan untuk mendapatkan literal kelas untuk jenis generik, seperti Senarai, menimbulkan beberapa cabaran disebabkan oleh mekanisme pemadaman jenis Java.

Jenis Pemadaman dan Implikasinya

Pemadaman jenis merujuk kepada proses di mana maklumat jenis yang terkandung dalam jenis parameter dialih keluar semasa penyusunan. Contohnya, kedua-dua Senarai dan Senaraikan hujah generiknya akan dipadamkan dan disimpan sebagai Senarai dalam kod bait.

Pemadaman ini mempunyai implikasi penting. Secara khusus, ini bermakna bahawa kelas literal untuk jenis parameter tidak wujud. Ini kerana perwakilan masa jalan jenis ini hanyalah Senarai, tanpa mengira parameter jenis tertentu.

Percubaan Gagal

Percubaan untuk mendapatkan literal kelas untuk jenis generik secara langsung, seperti List.class, menghasilkan amaran atau ralat tidak padan jenis. Menambah kad bebas (?) pada parameter jenis, seperti dalam List.class, juga gagal disebabkan oleh ralat sintaks.

Pendekatan Alternatif

Sejak mendapatkan literal kelas untuk jenis generik adalah mustahil, pendekatan alternatif mesti digunakan. Satu pilihan ialah menggunakan @SuppressWarnings("unchecked") untuk menyekat amaran yang disebabkan oleh penggunaan List yang tidak berparameter.

Walau bagaimanapun, penyelesaian yang lebih elegan ialah menggunakan refleksi untuk mengintrospeksi kelas dan mendapatkan generiknya taip maklumat. Ini boleh dicapai menggunakan kaedah getGenericType() Medan.

Sebagai contoh, kod berikut menunjukkan mendapatkan maklumat jenis generik untuk medan jenis List:

    Field field = Foo.class.getDeclaredField("list");
    Type type = field.getGenericType();
    if (type instanceof ParameterizedType) {
        ParameterizedType pt = (ParameterizedType) type;
        Class<?> rawType = pt.getRawType();
        Type[] typeArguments = pt.getActualTypeArguments();
        // ... (process the generic type information) ...
    }

Kesimpulan

Walaupun mekanisme pemadaman jenis Java menghalang penciptaan langsung literal kelas untuk jenis generik, pendekatan alternatif, seperti refleksi, boleh digunakan untuk mendapatkan maklumat jenis yang diperlukan. Memahami implikasi pemadaman jenis dan menggunakan kaedah alternatif ini memastikan pengendalian jenis generik yang tepat di Jawa.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Literal Kelas daripada Jenis Generik di Java?. 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