Rumah  >  Artikel  >  Java  >  Apakah perbezaan antara kaedah generik Java dan penggunaan kad bebas?

Apakah perbezaan antara kaedah generik Java dan penggunaan kad bebas?

WBOY
WBOYasal
2024-05-02 11:51:021217semak imbas

Kaedah generik mempunyai parameter jenis yang menentukan jenis data yang boleh dikendalikan. Kad bebas mewakili jenis yang tidak diketahui, kad bebas atas menyatakan bahawa jenis itu ialah subkelas bagi jenis tertentu atau sendiri, dan kad bebas bawah menyatakan bahawa jenis itu ialah kelas induk atau sendiri.

Java 泛型方法与通配符的使用有何区别?

Perbezaan antara kaedah generik Java dan kad bebas

Pengenalan

Generik ialah alat berkuasa dalam Java yang membolehkan pembangun mencipta kod boleh guna semula tanpa perlu risau tentang ketidakkonsistenan jenis data. Kaedah generik dan kad bebas ialah dua mekanisme yang meningkatkan lagi keupayaan generik. Artikel ini akan meneroka perbezaan mereka dan menunjukkan cara menggunakannya melalui contoh praktikal.

Kaedah Generik

Kaedah generik ialah kaedah yang mempunyai parameter jenis. Parameter jenis menentukan jenis data yang boleh digunakan oleh kaedah tersebut. Sebagai contoh, kaedah generik berikut boleh beroperasi pada senarai apa-apa jenis:

public static <T> void printList(List<T> list) {
    for (T item : list) {
        System.out.print(item + " ");
    }
    System.out.println();
}

Kaedah generik boleh dipanggil dengan menentukan parameter jenis apabila menggunakan kaedah:

List<String> names = new ArrayList<>();
names.add("John");
names.add("Mary");

printList(names); // 输出:John Mary

Wildcards

Wildcard ialah sintaks khas yang digunakan untuk mewakili jenis yang tidak diketahui. Ia sering digunakan untuk membuat sempadan atas atau bawah pada generik.

  • Kad bebas sempadan atas (? memanjangkan T) menunjukkan bahawa jenis yang tidak diketahui ialah subkelas jenis T atau T itu sendiri.
  • Kad bebas sempadan bawah (? super T) menunjukkan bahawa jenis yang tidak diketahui ialah kelas induk jenis T atau T itu sendiri.

Sebagai contoh, kaedah generik berikut menggunakan kad bebas sempadan atas untuk mendapatkan kelas super semua objek dalam senarai:

public static <T> List<Class<?>> getSuperclasses(List<? extends T> list) {
    List<Class<?>> superclasses = new ArrayList<>();
    for (T item : list) {
        superclasses.add(item.getClass().getSuperclass());
    }
    return superclasses;
}

Kes praktikal

Pertimbangkan kes berikut: Kami mempunyai kelas haiwan yang melaksanakan antara muka Haiwan , dan ingin mempunyai Kaedah untuk mencetak senarai haiwan.

Kaedah Generik

Kami boleh mencipta kaedah generik untuk mencetak sebarang jenis Haiwan:

public static <T extends Animal> void printAnimals(List<T> animals) {
    for (T animal : animals) {
        System.out.println(animal.getName());
    }
}

Wildcards

Kami juga boleh menggunakan wildcard untuk mewakili mana-mana subkelas Haiwan:

rree dalam kedua-dua kes ini , kita boleh menggunakan kaedah tunggal untuk mencetak senarai jenis haiwan yang berbeza. Walau bagaimanapun, kaedah generik menyediakan keselamatan jenis kerana ia memaksa parameter jenis untuk mewarisi antara muka Haiwan, manakala kad bebas tidak memberikan jaminan ini.

Atas ialah kandungan terperinci Apakah perbezaan antara kaedah generik Java dan penggunaan kad bebas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn