Java Generik dengan Kelas dan Keserasian Antara Muka
Di Java, mencipta objek kelas dengan kekangan tertentu boleh menjadi mencabar. Senario biasa ialah mentakrifkan objek kelas yang memanjangkan kelas tertentu sambil melaksanakan antara muka tertentu secara serentak. Walau bagaimanapun, mencapai kedua-dua kekangan secara serentak menggunakan generik telah menjadi titik perbalahan yang biasa.
Percubaan untuk memaksa kelas melanjutkan KelasA dan melaksanakan antara muka AntaramukaB menggunakan sintaks:
Class<? extends ClassA>
atau
Class<? extends InterfaceB>
hanya akan memenuhi satu keperluan dan gagal untuk digabungkan kedua-duanya.
Penyelesaian
Mujurlah, generik Java membenarkan berbilang antara muka atau antara muka kelas tambah. Untuk mencapai matlamat ini, ubah suai pengisytiharan kad bebas seperti berikut:
<T extends ClassA & InterfaceB>
Seperti yang digambarkan dalam Tutorial Generik oleh Sun, dengan menambahkan & Nama Antaramuka untuk setiap antara muka tambahan yang diperlukan, gabungan kompleks yang sewenang-wenangnya boleh dicapai. Contohnya, pengisytiharan JavaDoc Collections#max menunjukkan kerumitan ini:
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Memelihara keserasian binari memerlukan pengisytiharan rumit ini.
Pelaksanaan dengan Kelas dan Kekangan Antara Muka
Untuk melaksanakan sekatan yang diingini dalam pembolehubah pengisytiharan, letakkan sempadan generik pada kelas:
class classB { } interface interfaceC { } public class MyClass<T extends classB & interfaceC> { Class<T> variable; }
Kesimpulan
Generik Java menyediakan cara yang fleksibel untuk mencipta gabungan kelas dan antara muka yang terhad. Dengan memahami sintaks dan pengehadan, pembangun boleh memanfaatkan kuasa ini untuk menguatkuasakan keperluan khusus dalam kod mereka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggabungkan Kelas dan Kekangan Antara Muka Menggunakan Generik Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!