Java akan selalu mencoba menggunakan versi metode yang paling spesifik dan berlaku yang tersedia (lihat JLS §15.12.2 ).
Object
, char[]
dan Integer
semuanya dapat dianggap null
sebagai nilai yang valid. Oleh karena itu ketiga versi ini dapat diterapkan, jadi Java harus menemukan yang paling spesifik.
Karena Object
merupakan super-type char[]
, versi array lebih spesifik daripada versi-nya Object
. Jadi jika hanya dua metode itu ada, char[]
versi akan dipilih.
Ketika kedua versi char[]
dan Integer
tersedia, maka keduanya lebih spesifik daripada Object
tetapi tidak ada yang lebih spesifik dari yang lain, jadi Java tidak dapat memutuskan mana yang akan dipanggil. Dalam hal ini, Anda harus menyebutkan secara eksplisit mana yang ingin Anda panggil dengan melemparkan argumen ke jenis yang sesuai.
Perhatikan bahwa dalam praktiknya masalah ini terjadi jauh lebih jarang daripada yang diperkirakan orang. Alasan untuk ini adalah bahwa itu hanya terjadi ketika Anda secara eksplisit memanggil metode dengan null
atau dengan variabel dari tipe yang agak tidak spesifik (seperti Object
).
Sebaliknya, doa berikut akan sangat jelas:
char[] x = null;
doSomething(x);
Meskipun Anda masih memberikan nilainya null
, Java tahu persis metode mana yang harus dihubungi, karena itu akan memasukkan jenis variabel ke dalam akun.
Integer
keint
.