Seperti yang Anda ketahui, java.util.Objects
adalah
Kelas ini terdiri dari metode utilitas statis untuk beroperasi pada objek.
Salah satu metode tersebut adalah Objects.isNull()
.
Pemahaman saya adalah bahwa itu Objects.isNull()
akan menghilangkan kemungkinan tidak sengaja memberikan nilai null ke objek dengan menghilangkan yang kedua =
.
Namun, Catatan API menyatakan:
Metode ini ada untuk digunakan sebagai Predikat, filter (Objects :: isNull)
Akankah ada alasan / keadaan yang saya harus menggunakan object == null
lebih Objects.isNull()
dalam pernyataan jika ?
Haruskah Objects.isNull()
dibatasi pada Predikat secara eksklusif?
if(null == variable)
secara konsisten…variable
adalahBoolean
.Jawaban:
Jika Anda melihat kode sumber dari
IsNull
metode,/* Returns true if the provided reference is null otherwise returns false.*/ public static boolean isNull(Object obj) { return obj == null; }
Sama. Tidak ada perbedaan. Jadi Anda bisa menggunakannya dengan aman.
sumber
== null
dalam semantikif
, tetapi isNull sangat bagus untuk digunakan pada ekspresi lambda.Objects.isNull
dimaksudkan untuk digunakan dalam pemfilteran lambda Java 8.Jauh lebih mudah dan lebih jelas untuk menulis:
daripada menulis:
.stream().filter(x -> x == null).
Dalam sebuah
if
pernyataan, bagaimanapun, keduanya akan berhasil. Penggunaan dari== null
mungkin lebih mudah untuk dibaca tetapi pada akhirnya akan bermuara pada preferensi gaya.sumber
Lihat sumbernya:
public static boolean isNull(Object obj) { return obj == null; }
Untuk memeriksa
null
nilai, Anda dapat menggunakan:Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
Fakta yang
Objects.isNull
dimaksudkan untukPredicate
s tidak menghalangi Anda untuk menggunakannya seperti di atas.sumber
=
alih-alih==
(tidak akan dikompilasi kecuali itu adalahBoolean
pembungkus nullable , yo be fair)Boolean
pembungkus nullable di Jawa. Ini memang sangat jarang (dan akan memberikan peringatan compiler ketika sebuah tugas untuknull
dicentang seolah-olah itu adalah kondisi), tetapi bukan tidak mungkin.Ya, salah satu alasannya adalah agar kode tetap sederhana. Dalam pernyataan if
object == null
jelas dan terkenal. Itu tidak dapat menyebabkan kesalahan apa pun jika misalnya ada kesalahan ketik.Jika ada
if (object = null) {}
dengan yang dihilangkan=
itu tidak akan dikompilasi atau akan menghasilkan peringatan jika adaBoolean
objek! Sebenarnya tidak ada alasan untuk menggunakanObjects.isNull(object)
lebihobject == null
dalam jika pernyataan . Berikut dua varian berdampingan:if (object == null) { } if (Objects.isNull(object)) { }
Bisa dibilang ya, itu terbatas pada Predikat saja, meski tidak ada kendala teknis untuk digunakan di
Objects.isNull()
mana - mana.Dari
public static boolean isNull(Object obj)
metode javadoc:Jadi jika Anda menggunakan metode ini sebagai bukan predikat, Anda sebenarnya menggunakan ekspresi yang lebih kompleks dan tidak praktis dibandingkan dengan yang sederhana
object == null
.Berikut ini cuplikan untuk membandingkan manfaat
Objects.isNull(object)
List<String> list = Arrays.asList("a", "b", null, "c", null); // As ready-made predicate long countNullsWithPredicate = list.stream().filter(Objects::isNull).count(); // Lambda long countNullsWithLambda = list.stream().filter(object -> object == null).count(); // Reimplement the Objects::isNull predicate long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() { @Override public boolean test(Object obj) { return obj == null; } }).count();
sumber
Secara semantik tidak ada perbedaan tetapi untuk keterbacaan saya lebih suka yang berikut ini
whatever == null
:import static java.util.Objects.isNull; // Other stuff... if(isNull(whatever)) { }
sumber