Masalahnya adalah bahwa String.valueOf
metode kelebihan beban :
Java Spesifikasi Bahasa mengamanatkan bahwa dalam kasus-kasus semacam ini, kelebihan yang paling spesifik dipilih:
Jika lebih dari satu metode anggota dapat diakses dan berlaku untuk pemanggilan metode, perlu memilih satu untuk memberikan deskriptor untuk pengiriman metode run-time. Bahasa pemrograman Java menggunakan aturan bahwa metode yang paling spesifik dipilih.
A char[]
adalah-an Object
, tetapi tidak semua Object
is-a char[]
. Oleh karena itu, char[]
adalah lebih spesifik dari Object
, dan seperti yang ditentukan oleh bahasa Jawa, String.valueOf(char[])
kelebihan dipilih dalam kasus ini.
String.valueOf(char[])
mengharapkan array menjadi non- null
, dan karena null
diberikan dalam kasus ini, ia kemudian melempar NullPointerException
.
"Perbaikan" yang mudah adalah dengan melemparkan null
secara eksplisit ke Object
sebagai berikut:
System.out.println(String.valueOf((Object) null));
// prints "null"
Pertanyaan-pertanyaan Terkait
Pesan moral dalam cerita
Ada beberapa yang penting:
- Java Edisi 2 yang Efektif, Butir 41: Gunakan kelebihan muatan dengan bijaksana
- Hanya karena Anda bisa kelebihan, bukan berarti Anda harus setiap saat
- Mereka dapat menyebabkan kebingungan (terutama jika metode melakukan hal-hal yang sangat berbeda)
- Menggunakan IDE yang baik, Anda dapat memeriksa kelebihan beban yang dipilih pada waktu kompilasi
- Dengan Eclipse, Anda dapat mengarahkan mouse ke ekspresi di atas dan melihat memang ,
valueOf(char[])
kelebihan dipilih!
- Terkadang Anda ingin memberikan secara eksplisit
null
(contoh untuk diikuti)
Lihat juga
Saat casting null
Setidaknya ada dua situasi di mana secara eksplisit casting null
ke tipe referensi tertentu diperlukan:
- Untuk memilih kelebihan beban (seperti yang diberikan dalam contoh di atas)
- Untuk memberikan
null
sebagai argumen tunggal ke parameter vararg
Contoh sederhana dari yang terakhir adalah sebagai berikut:
static void vararg(Object... os) {
System.out.println(os.length);
}
Kemudian, kita dapat memiliki yang berikut ini:
vararg(null, null, null); // prints "3"
vararg(null, null); // prints "2"
vararg(null); // throws NullPointerException!
vararg((Object) null); // prints "1"
Lihat juga
Pertanyaan-pertanyaan Terkait
null
dalam kasus ini), pastikan bahwa kedua kelebihan tersebut bertindak sama terkait dengan nilai itu!