Rumah >Java >javaTutorial >Bagaimanakah Generik Boleh Menghapuskan Taip Apabila Mendapatkan Objek daripada Koleksi Heterogen?

Bagaimanakah Generik Boleh Menghapuskan Taip Apabila Mendapatkan Objek daripada Koleksi Heterogen?

Susan Sarandon
Susan Sarandonasal
2024-12-24 00:19:10318semak imbas

How Can Generics Eliminate Typecasting When Retrieving Objects from Heterogeneous Collections?

Mengatasi Typecasting dengan Generik dalam Jenis Pulangan

Dalam pengaturcaraan OOP, kelas sering mengekalkan koleksi objek berkaitan. Sebagai contoh, kelas Haiwan mungkin menjejaki senarai rakan, yang boleh menjadi contoh pelbagai subkelas seperti Anjing dan Itik.

Secara tradisinya, mendapatkan semula rakan tertentu daripada senarai ini memerlukan taip kerana sifat heterogen koleksi itu. Ini menghasilkan kod seperti:

Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());

((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();

Untuk mengelakkan penuangan taip yang menyusahkan ini, pertimbangkan untuk menggunakan generik untuk menjadikan jenis pulangan kaedah callFriend khusus kepada subkelas yang betul. Walau bagaimanapun, dalam senario khusus ini, menentukan jenis pemulangan sebagai parameter seperti:

public <T extends Animal> T callFriend(String name, T unusedTypeObj) {
    return (T)friends.get(name);
}

tidak membantu kerana parameter jenis yang tidak digunakan tidak memberikan maklumat tambahan pada masa jalan.

Sebaliknya, penyelesaian melibatkan menghantar kelas jenis yang diingini sebagai hujah untuk memanggil Rakan:

public <T extends Animal> T callFriend(String name, Class<T> type) {
    return type.cast(friends.get(name));
}

Dengan pelaksanaan ini, panggilan kaedah menjadi:

jerry.callFriend("spike", Dog.class).bark();
jerry.callFriend("quacker", Duck.class).quack();

Penyelesaian ini menghapuskan taip masa jalan dan memastikan objek yang dikembalikan boleh dihantar dengan selamat ke subkelas yang dikehendaki.

Atas ialah kandungan terperinci Bagaimanakah Generik Boleh Menghapuskan Taip Apabila Mendapatkan Objek daripada Koleksi Heterogen?. 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