Mengatasi Jenis Casting dalam Kaedah Pengembalian Jenis dengan Generik
Dalam pengaturcaraan berorientasikan objek, adalah amalan biasa untuk menggunakan warisan untuk memodelkan jenis yang berbeza objek yang mempunyai ciri-ciri yang dikongsi bersama. Pertimbangkan contoh kelas Haiwan di mana setiap haiwan boleh mempunyai pelbagai kawan. Setiap subkelas haiwan, seperti Anjing, Itik dan Tetikus, menambah gelagat khususnya sendiri.
Masalahnya:
Menggunakan pendekatan tradisional, mengakses tingkah laku khusus bagi rakan haiwan memerlukan penghantaran jenis eksplisit, seperti yang dilihat dalam coretan kod yang menggunakan kelas Haiwan. Pendekatan ini boleh menjadi rumit dan memperkenalkan potensi ralat.
Matlamat:
Objektifnya adalah untuk menghapuskan keperluan untuk tuangan jenis dengan memanfaatkan generik untuk pengembalian kaedah taip, membenarkan akses terus kepada gelagat yang diingini.
The Penyelesaian:
Walaupun pengehadan generik untuk semakan jenis masa jalan, penyelesaian wujud. Begini cara kaedah callFriend boleh disemak menggunakan parameter jenis generik T:
public <T extends Animal> T callFriend(String name, Class<T> type) { return type.cast(friends.get(name)); }
Penggunaan:
Kaedah callFriend yang disemak kemudiannya boleh dipanggil dalam perkara berikut cara:
jerry.callFriend("spike", Dog.class).bark(); jerry.callFriend("quacker", Duck.class).quack();
Faedah:
Pendekatan ini menghapuskan penghantaran jenis dan membolehkan akses terus kepada gelagat yang sesuai. Selain itu, ia memastikan bahawa pengkompil mengesahkan bahawa argumen jenis yang dihantar kepada callFriend ialah subjenis Haiwan, meningkatkan keselamatan.
Penghadan:
Sementara penyelesaian ini menangani jenis isu pemutus, perlu diingatkan bahawa ia tidak benar-benar menguatkuasakan semakan jenis masa jalan. Namun begitu, ia kekal sebagai penyelesaian yang berguna untuk senario yang jenisnya terkenal dan pemutus yang tepat dipastikan.
Atas ialah kandungan terperinci Bagaimanakah Generik Boleh Menghapuskan Jenis Casting dalam Kaedah Mengembalikan Jenis untuk Keselamatan Kod Dipertingkatkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!