Jangan gunakan null, gunakan Opsional
Seperti yang telah Anda tunjukkan, salah satu masalah terbesar nulldi Jawa adalah dapat digunakan di mana saja , atau setidaknya untuk semua jenis referensi.
Tidak mungkin mengatakan itu bisa nulldan apa yang tidak bisa.
Java 8 memperkenalkan pola yang lebih baik banyak: Optional.
Dan contoh dari Oracle:
String version = "UNKNOWN";
if(computer != null) {
Soundcard soundcard = computer.getSoundcard();
if(soundcard != null) {
USB usb = soundcard.getUSB();
if(usb != null) {
version = usb.getVersion();
}
}
}
Jika masing-masing dari ini dapat atau tidak dapat mengembalikan nilai yang berhasil, Anda dapat mengubah API ke Optionals:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
Dengan secara eksplisit menyandikan opsionalitas dalam tipe, antarmuka Anda akan jauh lebih baik, dan kode Anda akan lebih bersih.
Jika Anda tidak menggunakan Java 8, Anda dapat melihatnya com.google.common.base.Optionaldi Google Guava.
Penjelasan yang baik oleh tim Guava: https://github.com/google/guava/wiki/UsingAndAvoidingNullExplained
Penjelasan yang lebih umum tentang kerugian hingga nol, dengan contoh-contoh dari beberapa bahasa: https://www.lucidchart.com/techblog/2015/08/31/the-worst-mistake-of-computer-science/
@Nullull, @Nullable
Java 8 menambahkan anotasi ini untuk membantu alat pengecekan kode seperti IDE menangkap masalah. Mereka cukup terbatas dalam efektivitasnya.
Periksa kapan masuk akal
Jangan menulis 50% dari kode Anda memeriksa nol, terutama jika tidak ada yang masuk akal kode Anda dapat dilakukan dengan nullnilai.
Di sisi lain, jika nullbisa digunakan dan berarti sesuatu, pastikan untuk menggunakannya.
Pada akhirnya, Anda jelas tidak dapat menghapus nulldari Jawa. Saya sangat menyarankan untuk mengganti Optionalabstraksi jika memungkinkan, dan memeriksa nullwaktu lain yang Anda bisa lakukan sesuatu yang masuk akal tentangnya.