Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Mengehadkan Kelas Generik Java untuk Memanjangkan Kelas dan Melaksanakan Antara Muka Secara serentak?

Bagaimanakah Saya Boleh Mengehadkan Kelas Generik Java untuk Memanjangkan Kelas dan Melaksanakan Antara Muka Secara serentak?

Barbara Streisand
Lepaskan: 2024-12-08 02:44:15
asal
454 orang telah melayarinya

How Can I Restrict a Java Generic Class to Extend a Class and Implement an Interface Simultaneously?

Java Generik dengan Kelas dan Antara Muka

Apabila bekerja dengan generik di Java, anda mungkin menghadapi keperluan untuk mengehadkan jenis kelas generik untuk melanjutkan sesuatu yang khusus kelas dan melaksanakan antara muka tertentu. Walaupun nampaknya munasabah untuk menjangkakan bahawa percubaan berikut akan berjaya:

Class<? extends ClassA>
Salin selepas log masuk
Class<? extends InterfaceB>
Salin selepas log masuk

Malangnya, hanya satu daripada ini boleh digunakan pada satu masa. Jadi, bagaimanakah kita boleh menggabungkan dua sekatan?

Penyelesaian: Parameter Jenis Berbilang Sempadan

Malah, adalah mungkin untuk menentukan berbilang antara muka atau kelas dan antara muka dalam parameter jenis generik menggunakan "&":

<T extends ClassA & InterfaceB>
Salin selepas log masuk

Ini membolehkan kami mentakrifkan jenis generik yang terhad kepada kedua-dua melanjutkan kelas yang ditentukan dan melaksanakan antara muka yang ditentukan.

Sebagai contoh, jika kita mentakrifkan kelas ClassB dan antara muka AntaramukaC, kita boleh mencipta kelas generik seperti berikut:

class MyClass<T extends ClassB & InterfaceC> {
    Class<T> variable;
}
Salin selepas log masuk

Ini memastikan bahawa medan pembolehubah bagi MyClass hanya boleh menyimpan rujukan kepada kelas yang memanjangkan ClassB dan melaksanakan InterfaceC.

Kerumitan dan Keserasian Pertimbangan

Walaupun ciri ini memberikan fleksibiliti untuk menentukan jenis generik, ia juga boleh membawa kepada pengisytiharan yang kompleks, seperti yang dilihat dalam pengisytiharan JavaDoc Collections#max:

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
Salin selepas log masuk

Kerumitan ini timbul disebabkan oleh pertimbangan untuk keserasian binari. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa kerumitan ini terutamanya ditemui semasa mentakrifkan kelas atau kaedah generik, dan bukan semasa mengisytiharkan pembolehubah generik.

Oleh itu, untuk mencapai matlamat anda mencipta objek kelas yang memanjangkan kelas tertentu dan melaksanakan antara muka tertentu, anda boleh menggunakan pendekatan berikut:

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
    T variable;
}
Salin selepas log masuk

Ini akan memberikan anda sekatan yang diingini untuk medan pembolehubah Kelas Saya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengehadkan Kelas Generik Java untuk Memanjangkan Kelas dan Melaksanakan Antara Muka Secara serentak?. 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