1. Знайомство з класом ObjectUtils
Методи:
allNotNull(Object... values) | Перевіряє, що всі об'єкти не null |
allNull(Object... values) | Перевіряє, що всі об'єкти дорівнюють null |
anyNotNull(Object... values) | Перевіряє, що хоча б один об'єкт не null |
anyNull(Object... values) | Перевіряє, що хоча б один об'єкт null |
clone(T obj) | Клонує об'єкт |
cloneIfPossible(T obj) | Клонує об'єкт або повертає оригінал |
compare(T c1, T c2) | Порівнює об'єкти |
defaultIfNull(T object, T defaultValue) | Повертає default-об'єкт, якщо object дорівнює null |
equals(Object object1, Object object2) | Порівнює два об'єкти |
notEqual(Object object1, Object object2) | Перевірять, що два об'єкти не рівні |
firstNonNull(T... values) | Повертає перший об'єкт, який не null |
getFirstNonNull(Supplier |
Повертає перший об'єкт, який не null |
getIfNull(T object, Supplier |
Повертає цей об'єкт, якщо він не дорівнює null, інакше повертає значення Supplier.get() переданого Supplier |
hashCode(Object obj) | Обчислює hashCode для об'єкта |
hashCodeMulti(Object... objects) | Обчислює hashCode для групи об'єктів |
isEmpty(Object object) | Перевіряє, що об'єкт empty або null |
isNotEmpty(Object object) | Перевіряє, що об'єкт не є empty або null |
requireNonEmpty(T obj) | Перевіряє, що об'єкт не null, інакше кидає виняток |
requireNonEmpty(T obj, String message) | Перевіряє, що об'єкт не null, інакше кидає виняток |
identityToString(Object object) | Повертає рядок для об'єкту |
toString(Object obj) | Повертає рядок для об'єкту |
toString(Object obj, String nullStr) | Повертає рядок для об'єкту |
toString(Object obj, Supplier |
Повертає рядок для об'єкту |
Давай розглянемо по одному методу з кожної групи. Я сподіваюся, ти часто ними користуватимешся, адже вони дуже зручні і дозволяють уникати зайвого коду.
2. ObjectUtils.compare()
Метод порівнює об'єкти за таким же принципом, як і comparator: більше, менше чи одно. Його можна використовувати для сортування об'єктів.
Сигнатура методу має вигляд:
public static <T extends Comparable<? super T>> int compare(final T c1, final T c2);
public static <T extends Comparable<? super T>> int compare(final T c1, final T c2, final boolean nullGreater);
Якщо третій параметр (nullGreater) дорівнює true, то null завжди вважатиметься більше, ніж null. Метод повертає позитивне значення, якщо c1> c2, негативне, якщо c1 <c2 і 0, якщо c1 == c2.
Приклад:
String firstValue = "javaRush";
String secondValue = "javaRush";
System.out.print(ObjectUtils.compare(firstValue, secondValue));
System.out.println();
firstValue = "javaRush";
secondValue = null;
System.out.print(ObjectUtils.compare(firstValue, secondValue));
System.out.println();
firstValue = "";
secondValue = "javaRush";
System.out.print(ObjectUtils.compare(firstValue, secondValue));
System.out.println();
Програма виведе на екран результат:
0
1
-8
3. ObjectUtils.isNotEmpty()
Метод isNotEmpty() перевіряє, що переданий об'єкт не порожній і не null.
Сигнатура методу:
public static boolean isNotEmpty(final Object object)
Приклад:
List<String> values = new ArrayList<>();
System.out.println(ObjectUtils.isNotEmpty(values));
values.add("javaRush");
System.out.println(ObjectUtils.isNotEmpty(values));
values = null;
System.out.println(ObjectUtils.isNotEmpty(values));
На екран буде виведено результат:
false
true
false
4. java.util.Objects
Розробникам Java дуже сподобалася ідея з ObjectUtils, так що в JDK 7 вони додали свій варіант:
isNull(Object obj) | Перевіряє, що об'єкт дорівнює null |
nonNull(Object obj) | Перевіряє, що об'єкт не дорівнює null |
toString(Object o) | Перетворює об'єкт у рядок |
toString(Object o, String nullDefault) | Перетворює об'єкт у рядок |
boolean equals(Object a,Object b) | Порівнює об'єкти |
boolean deepEquals(Object a,Object b) | Порівнює об'єкти |
T requireNonNull(T obj) | Перевіряє, що переданий параметр не null |
T requireNonNull(T obj,String message) | Перевіряє, що переданий параметр не null |
int hashCode(Object o) | Обчислює hashCode для об'єкта |
int hash(Object… values) | Обчислює hashCode для групи об'єктів |
int compare(T a,T b,Comparator c) | Порівнює об'єкти |
Оскільки клас java.util.Objects входить до складу JDK, рекомендується використовувати його в коді.
Важливо помітити, що коли ти читатимеш чужий код, то швидше за все зустрінеш варіанти з ObjectUtils, таке часто буває в open-source. Тут ти можеш подивитися, чим вони відрізняються.