Rumah > Soal Jawab > teks badan
定义
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));
天蓬老师2017-04-18 10:50:45
<?> boleh ditulis sewenang-wenangnya tanpa sekatan,
<T> memerlukan tempat di mana T muncul adalah daripada jenis generik yang sama
伊谢尔伦2017-04-18 10:50:45
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
private static <T> T fun1(List<T> list) {
}
atau
public interface Main<T> {
public void fun(T t);
}
//然后
public class MainImpl<String> {
@override
public void fun(String str) {
}
}
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.
PHP中文网2017-04-18 10:50:45
? 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? .
黄舟2017-04-18 10:50:45
List<?>
ialah kelas super List<T>
dan boleh digunakan di mana sahaja List<?>
boleh digunakan List<T>