Editor PHP Apple akan menjawab untuk anda: Dalam generik Java, soalan "Bagaimana ini boleh berlaku dalam generik Java sebenarnya?" Kerana generik Java membenarkan penggunaan kad bebas untuk mewakili jenis yang tidak ditentukan, seperti menggunakan "?" Apabila kita mentakrifkan kaedah generik atau kelas generik, kita boleh menggunakan kad bebas untuk mengehadkan jenis parameter atau mengembalikan jenis nilai untuk mencapai beberapa fungsi tertentu. Walaupun dalam beberapa kes, mungkin terdapat beberapa had disebabkan pemadaman jenis, dengan reka bentuk dan penggunaan yang munasabah, kami boleh mencapai banyak operasi yang kelihatan mustahil dalam generik Java.
Saya baru perasan sesuatu yang sangat bertentangan dengan intuitif saya apabila ia berkaitan dengan Java Generics. Mari kita lihat kaedah ini:
public static <T> void inspect(T a, T b) { // ... }
Panggilan berikut boleh dibuat:
inspect(new Integer(3), new String("What? How?"))
Saya rasa sebaik sahaja jenis T diterbitkan, ia mesti konsisten, sama seperti dua rentetan atau dua integer. Ini tidak masuk akal, kerana jika saya mempunyai baris berikut dalam kaedah saya:
T tmp
Apakah itu T?
Boleh sesiapa jelaskan?
Hasil utama adalah Integer
和String
都是从Serialized
tercapai.
Jadi kod anda sama dengan:
public static <T extends Serializable> void inspect(T a, T b) { System.out.println(a + "_" + b); }
Jika ditukar kepada blow code, hanya sah dalam Integer
或Number
subkelas.
public static <T extends Number> void inspect(T a, T b) { System.out.println(a + "_" + b); }
Ini contoh yang lebih baik:
public class MyTest { @Test public void demo() { inspect(new FirstSon("a"), new SecondSon("b")); } public <T> void inspect(T a, T b) { System.out.println(a + "_" + b); } interface Parent { } static class FirstSon implements Parent { private String name; public FirstSon(String name) { this.name = name; } } static class SecondSon implements Parent { private String name; public SecondSon(String name) { this.name = name; } } }
Atas ialah kandungan terperinci Bagaimanakah ini boleh dilakukan dalam generik Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!