Sebenarnya, Anda dapat melakukan apa yang Anda inginkan. Jika Anda ingin memberikan banyak antarmuka atau antarmuka kelas plus, Anda harus membuat wildcard Anda terlihat seperti ini:
<T extends ClassA & InterfaceB>
Lihat Tutorial Generik di sun.com, khususnya bagian Parameter Tipe Terikat , di bagian bawah halaman. Anda sebenarnya dapat membuat daftar lebih dari satu antarmuka jika Anda mau, menggunakan & InterfaceName
untuk masing-masing yang Anda butuhkan.
Ini bisa menjadi rumit semena-mena. Untuk mendemonstrasikan, lihat deklarasi JavaDoc Collections#max
, yang (dibungkus menjadi dua baris) adalah:
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
mengapa begitu rumit? Seperti yang dikatakan dalam FAQ Java Generics: Untuk menjaga kompatibilitas biner .
Sepertinya ini tidak berfungsi untuk deklarasi variabel, tetapi itu berfungsi ketika meletakkan batas umum pada kelas. Jadi, untuk melakukan apa yang Anda inginkan, Anda mungkin harus melewati beberapa rintangan. Tapi kamu bisa melakukannya. Anda dapat melakukan sesuatu seperti ini, meletakkan batas umum pada kelas Anda dan kemudian:
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
untuk mendapatkan variable
yang memiliki batasan yang Anda inginkan. Untuk informasi dan contoh lebih lanjut, lihat halaman 3 Generics in Java 5.0 . Catatan, dalam <T extends B & C>
, nama kelas harus didahulukan, dan antarmuka mengikuti. Dan tentu saja Anda hanya dapat mendaftar satu kelas.