Czy wiesz, że klasy w języku Java nie kończą się na tych standardowych ze słowem kluczowym "class"? Java w wersji 14 udostępnia nowy rodzaj klasy, który jak najbardziej zasługuje na wspomnienie ze swej strony. Poznaj "record" w języku Java i w jakich sytuacjach warto wybrać rekord, zamiast klasy tradycyjnej 😳!
"RECORD" W JĘZYKU JAVA WYGODNYM SKRÓTEM PEWNEGO ZAPISU
Zacznijmy od podstawowych punktów. "record" to nowe słowo kluczowe wprowadzone w Javie 14 (rok 2020) i ono służy do definiowania tzw. klasy danych. Najprawdopodobniej zostało to zapożyczone od języka Kotlin, który już wcześniej został "uzbrojony" w taki budulec o tej samej nazwie ("data class"), także programiści Kotlina będą tu czuć się jak w domu 🏠.
Czym się różni klasa danych od klasy "zwykłej"? Ta pierwsza charakteryzuje się dużo krótszym zapisem kodowym i składa się jedynie z garści danych składowych oraz metod odpowiedzialnych za pobieranie tychże wartości (tzw. "gettery") i nie ma w sobie niczego innego! Stąd pełna nazwa słowa "record" w języku Java, to: niemodyfikowalna klasa danych.
Główną cechą jej zastosowania jest "składowanie" pewnych danych w klasie i możliwość ich "wyjmowania" stamtąd i...to w sumie tyle 😄!
Przykład kodu źródłowego
Na początek pokażę Ci porównanie dwóch klas, które będą miały identyczne znaczenie i możliwości, tylko będą się różnić budową 🧱. Proszę bardzo, klasa z dwiema danymi składowymi i metodami pobierającymi ich wartości:
public class DataClass {
private final int integer;
private final String string;
public DataClass(int integer, String string) {
this.integer = integer;
this.string = string;
}
public int getInteger() {
return integer;
}
public String getString() {
return string;
}
}Zwróć uwagę, że zmienne "integer" oraz "string" mają nałożony modyfikator "final" (zablokowanie powtórnego przypisania nowej wartości po przypisaniu w konstruktorze). Musi tam być, bo rekord ma za zadanie przechowywać wartości, aby użytkownik mógł je swobodnie stamtąd "wyjmować", natomiast wszystkie dane muszą być "nietykalne" 🔒.
A teraz zobacz jak wygląda ekwiwalent w postaci "record" w języku Java:
public record DataClass(int integer, String string) {
}Łoł, ale się skurczyło 😁! Dane składowe powędrowały do nawiasów okrągłych zaraz po nazwie klasy danych, dokładnie tak jak przy metodzie! A gdzie metody? Są już budowane "z automatu" 🧨!
Aby to udowodnić, utwórzmy sobie instancję klasy danych:
var dataClass = new DataClass(3, "Mój łańcuch znaków");i podstawmy metody pod metodę wypisującą na terminal (słowo "var" oznacza wydedukowanie typu zmiennej lokalnej przez kompilator, przez co my nie musimy tego robić):
System.out.println(dataClass.integer());
System.out.println(dataClass.string());Jak sobie to wpiszesz, to zwróć uwagę, że kompilator nie protestuje w sprawie metod. One tam są, tylko "zaszyte pod maską" ℹ️! Właśnie to jest główna zaleta klasy danych tworzonych przy użyciu słowa "record" w języku Java.
Warto nadmienić, że poza widocznym gołym okiem skróceniem kodu do absolutnego minimum, klasa danych zawiera też zdefiniowane przesłonięcia metod: "toString", "hashCode" i "equals", czyli "świętej trójcy" matki wszystkich obiektów, "Object" 😊! "toString" wypisuje wszystkie dane i ich wartości w nawiasach kwadratowych, a "hashCode" z "equals" odpowiadają za weryfikowanie instancji tej samej klasy danych czy przypadkiem nie są sobie równe (w załączonych artykułach opisałem zagadnienie definiowania kryterium "równości obiektów" 💥).
Kiedy z tego NIE korzystać?
Proste pytanie, prosta odpowiedź - kiedy wiesz, że będziesz chciał(a) zmieniać wartości danych składowych. Wtedy musisz przejść na klasę "zwykłą" 🙂.
![]() |
Niemodyfikowalna klasa danych tworzona za pomocą słowa "record" w języku Java, jest skróconym zapisem definicji klasy, w której znajdują się finalne dane składowe i metody pobierające ich wartości.
Zakończyliśmy wątek klas danych w języku Java, więc teraz korzystaj do woli 💯!
