Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengelakkan Penyiaran Eksplisit dengan Jenis Pulangan Generik dalam Java?

Bagaimanakah Saya Boleh Mengelakkan Penyiaran Eksplisit dengan Jenis Pulangan Generik dalam Java?

Barbara Streisand
Barbara Streisandasal
2024-12-16 06:22:13613semak imbas

How Can I Avoid Explicit Typecasting with Generic Return Types in Java?

Jenis Pulangan Generik dalam Java

Di Java, generik ialah alat yang berkuasa untuk menulis kod selamat jenis. Walau bagaimanapun, isu jenis pulangan generik boleh menimbulkan cabaran, terutamanya apabila berurusan dengan hierarki kelas dengan gelagat berbeza. Artikel ini meneroka masalah dan menyediakan penyelesaian untuk menghapuskan keperluan untuk tuangan taip yang jelas.

Masalah timbul apabila bekerja dengan kelas asas (cth., Haiwan) dan subkelasnya (cth., Anjing, Itik, Tetikus). Dalam contoh yang disediakan, kelas asas Animal mentakrifkan kaedah callFriend yang mengembalikan objek Animal. Walau bagaimanapun, dalam amalan, kami mungkin mahu memanggil kaedah khusus untuk subkelas, seperti bark() untuk Dog atau quack() untuk Duck.

Untuk mengelakkan keperluan untuk taip manual, kami boleh menentukan pulangan generik taip untuk kaedah callFriend:

public <T extends Animal> T callFriend(String name) {
    return (T) friends.get(name);
}

Penyelesaian ini menyampaikan jenis pulangan yang dijangkakan kepada pengkompil, tetapi ia memperkenalkan parameter yang tidak digunakan unusedTypeObj. Untuk menangani perkara ini, kita boleh mengubah suai kaedah untuk menerima objek Kelas yang mewakili jenis pulangan yang diingini:

public <T extends Animal> T callFriend(String name, Class<T> type) {
    return type.cast(friends.get(name));
}

Kemudian, kita boleh memanggil kaedah dan menyediakan subkelas tertentu sebagai hujah:

jerry.callFriend("spike", Dog.class).bark();
jerry.callFriend("quacker", Duck.class).quack();

Penyelesaian ini mengelakkan keperluan untuk taip yang jelas dan meningkatkan keselamatan jenis kod. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendekatan ini memerlukan pengkompil untuk mengesahkan bahawa objek Kelas yang disediakan ialah subkelas Haiwan yang sah, yang mungkin mengenakan beberapa pengehadan. Namun begitu, ia menyediakan cara yang fleksibel dan berkesan untuk mengendalikan jenis pulangan generik dalam Java.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan Penyiaran Eksplisit dengan Jenis Pulangan Generik dalam Java?. 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