Java's Multiple Wildcards: Demystifying the Compiler's Confusion
Walaupun coretan kod dalam soalan pada mulanya mungkin kelihatan mengelirukan, prinsip asasnya agak mudah dan mematuhi jenis generik Java sistem.
Peranan Wildcard
Wildcard (*) mewakili jenis yang tidak diketahui. Dalam coretan, penggunaan berbilang kad bebas mewujudkan ketidakpastian untuk pengkompil:
static void doNothing(List<?> list1, List<?> list2) { }
Memandangkan kad bebas tidak berkaitan, anda boleh menggunakan doNothing dengan senarai jenis yang berbeza, cth., List
Kad Liar Bersarang dan Penukaran Tangkapan
Kekeliruan timbul terutamanya daripada salah faham peranan bersarang kad bebas:
static void probablyIllegal(List<List<?>> lol, List<?> list) { }
Dalam kes ini, Senarai kad bebas bersarang> tidak menangkap jenis seperti Senarai
static void nowDefinitelyIllegal(List<? extends List<?>> lol, List<?> list) { }
Sekarang, jika kami cuba menambah senarai (yang mungkin Senarai
Nota Tambahan
Atas ialah kandungan terperinci Bagaimanakah Kad Liar Berbilang Java Mempengaruhi Gelagat Kaedah Generik dan Keserasian Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!