Apakah ada metode statis standar Java "null atau sama"?

101

Untuk menyimpan beberapa pengetikan dan mengklarifikasi kode saya, apakah ada versi standar dari metode berikut?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}
Chris Conway
sumber
Bisakah seseorang mengatakan di mana hal seperti itu berguna?
anjanb
2
Ini hanya memungkinkan Anda untuk melewati pemeriksaan nol dalam metode equals () Anda.
Michael Myers
1
Jika Anda mengimplementasikan Collection, metode .contains () Anda, ketika diberi "o" perlu diuji "jika koleksi ini berisi setidaknya satu elemen e sehingga (o == null? E == null: o.equals (e )). " Demikian pula, metode .remove () Anda harus menghapus elemen seperti itu.
newacct
6
Hanya dua sen saya. Saya akan menggunakan: public static boolean bothNullOrEqual (Objek x, Objek y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, Ini lebih mudah dibaca oleh programmer pemula.
m_vitaly
1
Kasus penggunaan lain: bandingkan nilai untuk melihat apakah nilai telah berubah dari nilai sebelumnya selama pemeriksaan kotor.
Neromancer

Jawaban:

193

Dengan Java 7 Anda sekarang dapat langsung melakukan aman nol sama dengan:

Objek. Sama (x, y)

(Perpustakaan Jakarta Commons ObjectUtils.equals () telah menjadi usang dengan Java 7)

Kdeveloper
sumber
Metode ini juga diterapkan di Googles Dependency injection-libray Guice.
Niels
1
Spring juga mengimplementasikan metode serupa: nullSafeEquals pada kelas
ObjectUtils
2
Google Guava juga memiliki Objects.equals ().
Spina
Ini hanya nullsafe concering x. Untuk y itu tergantung pada implementasi sama dari objek yang diberikan. (implementasinya adalah return (x == y) || (x != null && x.equals(y));)
emi-le
23

jika kebetulan Anda memiliki akses ke perpustakaan Jakarta Commons, ada ObjectUtils.equals () dan banyak fungsi berguna lainnya.

EDIT: salah membaca pertanyaan awalnya

Matt
sumber