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.

Kurs Java

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.