Klasa Objects
Java 7 wprowadziła nową klasę o nazwie Objects , która rozwiązuje sporo popularnych problemów, jednak niewiele osób zdaje sobie sprawę z jej istnienia. Jest ona zdefiniowana w pakiecie java.util, więc pełna ścieżka to java.util.Objects.
W klasie zdefiniowanych jest zestaw kilku użytecznych, statycznych metod, które przydadzą nam się m.in. do sprawdzania, czy pole jest nullem, ale także np. do wywoływania metody toString() , czy equals() w bezpieczny sposób.
Definiując metodę typu:
private boolean compareObjects(Object o1, Object o2) {
return o1.equals(o2);
}
pojawia się problem. Co w sytuacji, gdy o1 będzie nullem? Otrzymamy wyjątek NullPointerException. Możemy pozbyć się problemu dodając warunek if:
public boolean compareObjects(Object o1, Object o2) {
if(o1 != null)
return o1.equals(o2);
else
return false;
}
Problem ten jest jednak na tyle powtarzalny, że najczęściej radzono sobie z nim korzystając z biblioteki apache commons, konkretnie metody equals klasy ObjectUtils . Jak możemy jednak przeczytać w dokumentacji metoda ta jest odradzana od Javy 7, gdzie została zastąpiona przez metodę o tej samej nazwie, ale z klasy Objects ze standardowej biblioteki Javy właśnie.
Poprawiona metoda powinna wyglądać więc następująco:
public boolean compareObjects(Object o1, Object o2) {
return Objects.equals(o1, o2);
}
W podobny sposób rozwiązany został podobny problem dla metody toString(). Gdy nie mamy pewności, czy obiekt, na którym wywołujemy metodę toString() nie jest nullem, bezpieczniej jest posłużyć się metodą Objects.toString(), która w przypadku wartości null po prostu ją zwróci, zamiast rzucać NullPointerException.
public void safePrint(Object o) {
System.out.println(Objects.toString(o));
}
Do najprzydatniejszych metod w tej klasie należą jeszcze:
- deepEquals()
- compare()
- hashCode()
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.