Banyak kali saya menemukan diri saya nol memeriksa ketika mengambil nilai dari beberapa hierarki data untuk menghindari NullPointerExceptions, yang saya temukan cenderung rentan terhadap kesalahan dan membutuhkan banyak boilerplate.
Saya telah menulis rutin yang sangat sederhana yang memungkinkan saya melewatkan pemeriksaan nol saat mengambil objek ...
public final class NoNPE {
public static <T> T get(NoNPEInterface<T> in) {
try {
return in.get();
} catch (NullPointerException e) {
return null;
}
}
public interface NoNPEInterface<T> {
T get();
}
}
Saya menggunakannya agak seperti ini ...
Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom());
Di atas mengakibatkan saya mendapatkan objek Kamar atau nol, tanpa harus memeriksa semua level orangtua nol.
Apa pendapat Anda tentang hal di atas? Apakah saya membuat pola yang bermasalah? Apakah ada cara yang lebih baik untuk melakukan ini menurut Anda?
Option
(atau Maybe
) monad :)
java.util.Optional
alih-alih nol untuk mewakili data yang hilang? Ini menyediakan utilitas praktis baik untuk kasus yang Anda gambarkan maupun kasus di mana Anda ingin melanjutkan dengan data default alih-alih hanya mengembalikan kondisi kegagalan pada akhir rantai ..