1. Apakah Ralat Kekaburan?
2. Contoh Kekaburan: Pemadaman Lebihan Beban
Kod bermasalah:
class MyGenClass<T, V> { T ob1; V ob2; // Tentativa de sobrecarga void set(T o) { ob1 = o; } void set(V o) { ob2 = o; } }
Ralat: Percubaan untuk melebihkan kaedah set() berdasarkan parameter generik T dan V kelihatan sah, tetapi menyebabkan kekaburan.
3. Sebab Kekaburan
Contoh:
MyGenClass<String, String> obj = new MyGenClass<>();
Di sini, kedua-dua T dan V digantikan dengan String, menjadikan dua versi set() sama.
Keputusan:
Masalah Kedua: Pemadaman mengurangkan jenis kepada Objek.
void set(Object o) { // ... }
Ini menghapuskan sebarang perbezaan antara T dan V, menjadikan lebih muatan mustahil.
4. Mengapa Ini Berlaku?
5. Penyelesaian: Elakkan Lebihan Generik
Untuk menyelesaikan kekaburan, gunakan nama yang berbeza untuk kaedah.
Contoh yang diperbetulkan:
class MyGenClass<T, V> { T ob1; V ob2; void setOb1(T o) { ob1 = o; } void setOb2(V o) { ob2 = o; } }
Di sini, setOb1() dan setOb2() ialah kaedah yang berbeza, menghapuskan konflik.
6. Kesimpulan
Kekaburan seperti ini berlaku kerana pemadaman mengubah parameter generik kepada jenis mudah (Objek).
Untuk mengelakkan kesilapan, ikuti amalan ini:
Atas ialah kandungan terperinci Ralat Kekaburan dengan Generik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!