Java standardı "boş veya eşit" statik yöntemi var mı?


101

Biraz yazmayı kaydetmek ve kodumu netleştirmek için, aşağıdaki yöntemin standart bir sürümü var mı?

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

Birisi böyle bir şeyin nerede yararlı olduğunu söyleyebilir mi?
anjanb

2
Sadece equals () yönteminizdeki boş kontrolleri atlamanıza izin verir.
Michael Myers

1
Bir Koleksiyon uyguluyorsanız, .contains () yönteminiz, "o" verildiğinde, bu koleksiyonun (o == null? E == null: o.equals (e )). " Benzer şekilde, .remove () yönteminizin böyle bir öğeyi kaldırması gerekir.
newacct

6
Sadece iki sentim. Kullanacağım: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } IMHO, acemi programcılar için daha okunabilir.
m_vitaly

1
Başka bir kullanım durumu: kirli bir kontrol sırasında önceki değerinden değişip değişmediğini görmek için bir değeri karşılaştırın.
Neromancer

Yanıtlar:


193

Java 7 ile artık doğrudan boş bir kasa eşittir yapabilirsiniz:

Objects.equals (x, y)

(Jakarta Commons kitaplığı ObjectUtils.equals () Java 7 ile kullanılmaz hale geldi)


Bu yöntem aynı zamanda Googles Dependency injection-libray Guice'de de uygulanmaktadır.
Niels

1
NullSafeEquals ObjectUtils sınıf: Yay aynı zamanda benzer bir yöntem uygulayan
jpsstavares

2
Google Guava'da Objects.equals () da vardır.
Spina

Bu yalnızca nullsafe kabul eden x. Y için, verilen nesnenin eşitlerinin uygulanmasına bağlıdır. (uygulama return (x == y) || (x != null && x.equals(y));)
emi-le

23

eğer bir şans eseri Jakarta Commons kitaplığına erişiminiz varsa, ObjectUtils.equals () ve diğer birçok yararlı işlev vardır.

DÜZENLEME: soruyu başlangıçta yanlış okuyun


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.