Rumah >Java >javaTutorial >Mengapakah menggunakan jenis mentah dengan kaedah generik membawa kepada ralat taip dalam Java?

Mengapakah menggunakan jenis mentah dengan kaedah generik membawa kepada ralat taip dalam Java?

Patricia Arquette
Patricia Arquetteasal
2024-11-12 00:10:03673semak imbas

Why does using raw types with generic methods lead to type errors in Java?

Menggabungkan Jenis Mentah dan Kaedah Generik

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 sebagai hujahnya. Walau bagaimanapun, jika rujukan ArrayList diisytiharkan sebagai jenis mentah:

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 . Oleh itu, jenis pulangan ialah T[], yang bersamaan dengan String[].

Rujukan untuk Bacaan Lanjut

  • [JLS 4.8: Jenis Mentah ](https://docs.oracle.com/javase/specs/jls/se17/html/jls-4.html#jls-4.8)
  • [Tutorial Java: Generik](https:// docs.oracle.com/javase/tutorial/java/generics/)

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!

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