定义
public static void printList(List<?> list) {
for (Object elem : list){
System.out.println(elem + " ");
}
}
public static <T> void printList2(List<T> list) {
for (T elem : list){
System.out.println(elem + " ");
}
}
使用
MyList.printList(Arrays.asList(1, 2, 3));
MyList.printList2(Arrays.asList(1, 2, 3));
<?> boleh ditulis sewenang-wenangnya tanpa sekatan,
<T> memerlukan tempat di mana T muncul adalah daripada jenis generik yang sama
Kesannya adalah sama, bukannya <T> memerlukan tempat di mana T muncul adalah daripada jenis yang sama. Sebenarnya, dua kaedah di atas disusun ke dalam kod bait<T> dan Senarai<?>
Tetapi penggunaan kedua tidak memainkan sebarang peranan dalam pembangunan sebenar. Mengapa, melainkan generik ialah jenis yang mengisytiharkan nilai pulangan, atau ia diisytiharkan pada peringkat kelas. Contohnya
atau
Ini berjaya.
Jika tidak, gunakannya seperti ini
public static <T> void fun1(List<T> list)
Apakah peranan generik di sini? Saya benar-benar tidak nampak apa kesannya. Harus dikatakan bahawa tidak perlu menggunakannya dengan cara ini.
? Kedua-dua T dan T mewakili jenis yang tidak pasti, tetapi menggunakan T boleh melakukan operasi objek, seperti mengembalikan <T>t; Dalam kes ini, patutkah T digunakan? .
List<?>
ialah kelas superList<T>
dan boleh digunakan di mana sahajaList<?>
boleh digunakanList<T>