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łą" 🙂.

Słowo kluczowe "record" w języku Java

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 💯!

PODOBNE ARTYKUŁY