Saat membaca tutorial resmi Java tentang generik, saya menemukan bahwa Anda dapat membatasi argumen type (dalam hal ini adalah T
) untuk memperluas kelas dan / atau lebih banyak antarmuka dengan operator 'dan' ( &
) seperti ini:
<T extends MyClass & Serializable>
Saya mengganti &
dengan ,
(secara tidak sengaja dan masih berfungsi, dengan peringatan kecil).
Pertanyaan saya adalah, apakah ada perbedaan antara keduanya:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Dan contoh metode:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
Jawaban:
Ini menegaskan bahwa parameter tipe tunggal
T
harus diperpanjangMyClass
dan harusSerializable
.Ini mendeklarasikan dua tipe parameter, satu dipanggil
T
(yang harus diperluasMyClass
) dan yang lain disebutSerializable
(yang menyembunyikanjava.io.Serializable
- mungkin inilah peringatannya).sumber