Java Generik: Kelas dan Kekangan Antara Muka Digabungkan
Generik Java membenarkan pembangun mentakrifkan kelas dan kaedah yang berfungsi dengan pelbagai jenis data. Walau bagaimanapun, apabila menguatkuasakan kekangan pada jenis yang boleh digunakan, adalah wajar untuk menentukan berbilang sekatan, termasuk warisan kelas dan antara muka. Ini menimbulkan persoalan: bolehkah kita mentakrifkan jenis generik yang memanjangkan kelas tertentu dan melaksanakan antara muka tertentu secara serentak?
Cabaran Menentukan Kedua-dua Kelas dan Kekangan Antara Muka
Pertimbangkan senario berikut: kami ingin mencipta objek Kelas yang hanya menerima kelas yang melanjutkan kelas A dan melaksanakan antara muka B. Walau bagaimanapun, menggunakan pengisytiharan generik berikut secara berasingan tidak mencukupi:
Class<? extends ClassA> Class<? extends InterfaceB>
Penyelesaian: Menggabungkan Parameter Jenis Terhad
Nasib baik, generik Java menyediakan cara untuk menggabungkan berbilang kekangan menggunakan bounded jenis parameter. Untuk menentukan jenis generik yang memanjangkan kedua-dua kelas A dan melaksanakan antara muka B, kita boleh menggunakan sintaks berikut:
<T extends ClassA & InterfaceB>
Sintaks ini secara berkesan menentukan bahawa pembolehubah jenis generik T mesti memenuhi kedua-dua kekangan kelas dan antara muka.
Memelihara Keserasian dan Kompleks Binari Kekangan
Menggunakan berbilang kekangan dalam generik Java ialah teknik yang berkuasa, tetapi ia juga boleh membawa kepada senario yang rumit dan mencabar. Seperti yang diserlahkan dalam Soalan Lazim Java Generics, mengekalkan keserasian binari kadangkala memerlukan reka bentuk yang rumit seperti berikut:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Pelaksanaan Praktikal Menggunakan Kelas Generik
Walaupun ia tidak mungkin untuk mengisytiharkan pembolehubah secara langsung dengan kelas gabungan dan kekangan antara muka, kita boleh menggunakan kelas generik untuk mencapai ini kesan:
class ClassB { } interface InterfaceC { } public class MyClass<T extends ClassB & InterfaceC> { Class<T> variable; }
Dalam contoh ini, kami mencipta kelas MyClass generik yang mengehadkan pembolehubah kepada kelas yang melanjutkan KelasB dan melaksanakan AntaramukaC.
Kesimpulan
Menggabungkan kekangan kelas dan antara muka dalam generik Java membolehkan pembangun menguatkuasakan keperluan khusus pada jenis yang boleh digunakan. Dengan menggunakan parameter jenis terhad, kami boleh mencipta kelas dan kaedah generik yang mematuhi berbilang sekatan warisan, membolehkan lebih fleksibiliti dan kebolehselenggaraan kod.
Atas ialah kandungan terperinci Bolehkah Java Generics Menguatkuasakan Kedua-dua Kelas dan Kekangan Antara Muka Secara serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!