Memahami Melebihan Kaedah dengan Argumen Null
Kaedah terlebih muatan dengan parameter yang serupa boleh menyebabkan kekaburan apabila menghantar hujah nol. Isu ini timbul apabila berbilang kaedah mempunyai parameter terpakai yang sepadan dengan nilai nol.
Pertimbangkan kod Java berikut:
public static void doSomething(Object obj) { System.out.println("Object called"); } public static void doSomething(char[] obj) { System.out.println("Array called"); } public static void doSomething(Integer obj) { System.out.println("Integer called"); }
Apabila cuba memanggil doSomething(null), pengkompil menghadapi samar-samar ralat kaedah. Ini berlaku kerana kedua-dua kaedah Object dan char[] terpakai dan Java tidak dapat menentukan yang mana satu untuk digunakan.
Isu ini berpunca daripada fakta bahawa null boleh ditugaskan kepada pembolehubah mana-mana jenis rujukan, termasuk Object, char [], dan Integer. Memandangkan setiap kaedah ini menerima jenis rujukan yang serasi, Java menghadapi dilema dalam mengenal pasti kaedah terpakai yang paling khusus.
Untuk menyelesaikan kekaburan ini, kaedah terpakai yang paling spesifik dipilih. Dalam kes ini, char[] adalah lebih khusus daripada Object kerana ia adalah subjenis. Oleh itu, jika doSomething(null) digunakan tanpa menyatakan kaedah, versi char[] akan dipilih.
Walau bagaimanapun, apabila kedua-dua versi char[] dan Integer tersedia, keadaan menjadi lebih mencabar. Kedua-dua kaedah adalah sama khusus, dan Java tidak boleh sewenang-wenangnya memilih satu daripada yang lain. Dalam kes sedemikian, pelakon eksplisit diperlukan untuk menentukan kaedah yang diingini.
Contohnya:
doSomething((char[]) null); // Calls doSomething(char[])
Kesimpulannya, kaedah terlebih muatan dengan argumen nol boleh membawa kepada kekaburan apabila wujud berbilang kaedah yang berkenaan . Kaedah paling khusus dipilih berdasarkan jenis parameter, tetapi jika tiada pemenang yang jelas, pelakon yang jelas diperlukan untuk menyelesaikan konflik.
Atas ialah kandungan terperinci Bagaimanakah Java Mengendalikan Melebihan Kaedah dengan Argumen Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!