Чи є стандартний метод Java "як нульовий, так і рівний" статичний метод?


101

Щоб зберегти певний текст і уточнити код, чи є стандартна версія наступного методу?

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

Хтось може сказати, де така річ корисна?
anjanb

2
Він просто дозволяє пропустити нульові перевірки методом equals ().
Майкл Майерс

1
Якщо ви реалізуєте колекцію, ваш метод .contains (), коли дано "o", потрібно перевірити ", якщо ця колекція містить принаймні один елемент e такий, що (o == null? E == null: o.equals (e )). " Аналогічно, ваш метод .remove () повинен видалити такий елемент.
newacct

6
Всього два мої центи. Я б використовував: public static boolean bothNullOrEqual (Object x, Object y) {return (x == y || (x! = Null && x.equals (y))); } ІМХО, це читає для початківців програмістів.
m_vitaly

1
Інший випадок використання: порівняйте значення, щоб побачити, чи змінилося воно від попереднього значення під час брудної перевірки.
Нероманс

Відповіді:


193

З Java 7 тепер ви можете зробити нульовий сейф рівним:

Об'єкти.equals (x, y)

(Бібліотека Jakarta Commons ObjectUtils.equals () застаріла з Java 7)


Цей метод також реалізований в Gugles Dependpendation-library Guice.
Нільс

1
Spring також реалізує подібний метод: nullSafeEquals для класу
ObjectUtils

2
Google Guava має також Object.equals ().
Спіна

Це лише nullsafe, що поступається x. Для y це залежить від реалізації рівностей даного об'єкта. (реалізація є return (x == y) || (x != null && x.equals(y));)
emi-le

23

якщо випадково у вас є доступ до бібліотеки Джакарти Commons, є ObjectUtils.equals () та багато інших корисних функцій.

EDIT: спочатку неправильно прочитайте питання


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.