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
Lepaskan: 2024-12-24 00:19:10
asal
288 orang telah melayarinya

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();
Salin selepas log masuk

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);
}
Salin selepas log masuk

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));
}
Salin selepas log masuk

Dengan pelaksanaan ini, panggilan kaedah menjadi:

jerry.callFriend("spike", Dog.class).bark();
jerry.callFriend("quacker", Duck.class).quack();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan