Czasami, gdy piszemy w Javie, potrzebujemy stworzyć bardzo proste klasy, których jedynym zadaniem jest przenoszenie informacji. Takie klasy posiadają zwykle prywatne pola, gettery i konstruktory, co generuje dużo nadmiarowego kodu. Możemy się go jednak pozbyć używając rekordów, czyli specjalnych klas, które utworzymy za pomocą słowa kluczowego record.
Spis treści
Record vs. klasyczna klasa w Javie
Rekordy zostały wprowadzone do Javy w wersji 14 jako eksperymentalna funkcja, a oficjalnie zaczęły działać od wersji 15. Pozwalają one ustalić strukturę klasy za pomocą jednego słowa kluczowego record oraz listy parametrów. Spójrzcie na poniższy przykład:
Ta klasa jest właśnie takim nośnikiem informacji. W konstruktorze inicjalizujemy wszystkie prywatne pola i udostępniamy gettery, aby umożliwić pobieranie wartości tych pól. W przypadku, gdy tworzysz taką klasę w Javie w wersji 15 lub wyższej, narzędzie IntelliJ samo zasugeruje, że można z niej zrobić rekord. Gdy zgodzisz się na tę sugestię i pozwolisz IntelliJ zmienić tę klasę na rekord, otrzymasz:
Tak, tylko tyle. To, co robi powyższy kod, to:
- Tworzy klasę o nazwie User za pomocą rekordu;
- Rekord definiuje prywatne, finalne pola: name, lastName, email i age;
- Rekord dostarcza automatycznie gettery do każdego z tych pól. Gettery nazywają się tak jak pola, np. name();
- Rekord posiada również konstruktor, który przyjmuje argumenty i przypisuje je do odpowiadających pól;
- Dodatkowo, rekord zawiera metodę equals() do porównywania dwóch obiektów tej klasy;
- Rekord ma metodę toString(), która pozwala przedstawić obiekt tej klasy jako String;
- Rekord generuje także metodę hashCode(), która zwraca wartość liczbową typu int dla każdego obiektu. Jeżeli metoda equals() porównująca dwa obiekty zwróci false, to także metoda hashCode() na każdym z tych obiektów zwróci inną wartość liczbową.
Metody equals(), hashCode() i toString() są przysłoniętymi metodami z klasy Object.
Przekształcanie rekordów w klasyczne klasy
Żeby zobaczyć jak klasa utworzona za pomocą rekordu dokładnie wygląda, wystarczy, że zamienimy rekord z powrotem na “normalną” klasę. Możemy w tym celu kliknąć w słówko record i z żółtej żarówki wybrać opcję “Convert record to class”:

Zobaczymy wtedy dokładnie opisaną wyżej klasę:
Czyli wszystko, co widzicie powyżej, możecie zmieścić w tym:
Dzięki temu nie klepiemy tyle powtarzalnego kodu, a mamy wszystko czego do tego rodzaju klasy potrzebujemy.
Kiedy warto przesiąść się na rekordy w Javie
Najlepiej wtedy, gdy chcemy tworzyć klasy, których głównym celem jest przechowywanie danych. Pozwoli nam to zredukować zarówno ilość kodu jak i czas pracy. Natomiast klasy są lepszym wyborem, gdy potrzebujemy stworzyć coś bardziej zaawansowanego z wieloma polami i metodami.
Dajcie znać, czy używacie rekordów w swoich projektach, jak Wam się sprawdzają i czemu bardzo dobrze. 😈