Apabila bekerja dengan generik di Jawa, adalah penting untuk memahami implikasi penggunaan jenis mentah. Jenis mentah hanyalah rujukan kepada jenis generik tanpa sebarang parameter jenis dinyatakan.
Masalahnya
Pertimbangkan kod berikut:
ArrayList<String> a = new ArrayList<>(); String[] s = a.toArray(new String[0]);
Kod ini berjaya disusun kerana toArray ialah kaedah generik yang menerima tatasusunan jenis
ArrayList a = new ArrayList(); String[] s = a.toArray(new String[0]);
Pengkompil akan menghasilkan ralat, menunjukkan bahawa String[] diperlukan tetapi Objek[] ditemui. Ini kerana pengkompil mentafsirkan kaedah generik sebagai mengembalikan Object[] walaupun menerima String[] sebagai hujahnya.
Memahami Jenis Mentah
Untuk memahami tingkah laku ini, ia adalah penting untuk menyedari bahawa apabila anda menggunakan jenis mentah, anda kehilangan keupayaan untuk menentukan parameter jenis. Spesifikasi Bahasa Java (JLS) menyatakan bahawa untuk jenis mentah:
"Jenis pembina, kaedah contoh atau medan bukan statik M bagi jenis mentah C yang tidak diwarisi daripada superclass atau superinterfacenya. ialah jenis mentah yang sepadan dengan pemadaman jenisnya dalam pengisytiharan generik yang sepadan dengan C."
Dalam erti kata lain, semua kaedah dan medan generik dalam jenis mentah dianggap seolah-olah ia diisytiharkan dengan jenis mentah sendiri.
Implikasi untuk Kaedah Generik
Ini bermakna apabila anda menggunakan jenis mentah sebagai sasaran panggilan kaedah generik, pengkompil tidak boleh membuat kesimpulan parameter jenis bagi kaedah. Akibatnya, kaedah akan diandaikan sebagai generik hanya berbanding parameter jenis hujah. Dalam kes kami, kerana kami meluluskan hujah String[], kaedah toArray dianggap sebagai
Rujukan untuk Bacaan Lanjut
Atas ialah kandungan terperinci Mengapakah menggunakan jenis mentah dengan kaedah generik membawa kepada ralat taip dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!