Rumah >Java >Bagaimanakah ini boleh dilakukan dalam generik Java?

Bagaimanakah ini boleh dilakukan dalam generik Java?

王林
王林ke hadapan
2024-02-08 23:20:09963semak imbas

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.

Kandungan soalan

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?

Penyelesaian

Hasil utama adalah IntegerString都是从Serializedtercapai.

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 IntegerNumbersubkelas.

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam