Pembebanan Kaedah dengan Argumen Null: Menyelesaikan Kekaburan
Pemuatan berlebihan kaedah Java membenarkan berbilang kaedah dengan nama yang sama tetapi parameter berbeza. Walau bagaimanapun, apabila memanggil kaedah dengan hujah nol, pengkompil mungkin menghadapi kesamaran jika terdapat berbilang kaedah yang berkenaan.
Dalam coretan kod yang diberikan, kami mempunyai tiga kaedah doSomething dengan parameter Object, char[] dan Integer. Apabila memanggil doSomething(null), ralat kaedah samar-samar timbul. Mari kita mendalami isu ini.
Resolusi Kekaburan
Java mengutamakan versi kaedah terpakai yang paling khusus (JLS §15.12.2). Ketiga-tiga kaedah menerima null sebagai hujah yang sah, menjadikannya sama terpakai.
Object vs. char[]
Object ialah supertype char[], yang bermaksud char[] lebih spesifik daripada Object. Oleh itu, jika hanya kaedah Object dan char[] wujud, kaedah char[] akan dipilih.
Object vs. Integer
Walau bagaimanapun, dengan kedua-dua char [] dan kaedah Integer hadir, kedua-duanya tidak lebih spesifik daripada yang lain. Java tidak dapat menentukan yang mana satu untuk dipanggil, mengakibatkan kekaburan.
Penyelesaian
Untuk menyelesaikan kekaburan, hantar hujah nol secara eksplisit kepada jenis yang dikehendaki:
doSomething((Integer) null);
Dalam kes ini, pengkompil akan secara eksplisit memanggil doSomething(Integer obj) kaedah.
Perkaitan Praktikal
Kekaburan dengan hujah nol adalah kurang biasa daripada yang difikirkan. Ia biasanya berlaku apabila secara eksplisit menggunakan kaedah dengan nol atau menggunakan pembolehubah jenis yang tidak ditentukan (seperti Objek).
Sebaliknya, jika anda menghantar pembolehubah kepada kaedah, seperti:
char[] x = null; doSomething(x);
Java akan menentukan kaedah yang dimaksudkan dengan betul berdasarkan jenis pembolehubah, walaupun melepasi nilai nol.
Atas ialah kandungan terperinci Bagaimanakah Java Menyelesaikan Kaedah Melebihkan Kekaburan dengan Argumen Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!