Wzorce rekordów
Destrukturyzowanie rekordów we wzorcach
Wzorce rekordów to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Wzorce rekordów
Wzorzec rekordu dopasowuje rekord i destrukturyzuje go, przypisując jego składowe do zmiennych w jednym kroku. Nie trzeba już ręcznie wywoływać każdego akcesora.
Rekord do destrukturyzacji
Proszę zacząć od prostego rekordu. Jego składowe to elementy, które może wyodrębnić wzorzec.
public class Main {
record Point(int x, int y) {}
public static void main(String[] args) {
Point p = new Point(3, 4);
System.out.println(p.x() + ", " + p.y());
}
}Destrukturyzacja z instanceof
Zamiast używać instanceof Point p, a następnie p.x(), można napisać instanceof Point(int x, int y), aby bezpośrednio przypisać wartości do x i y.
public class Main {
record Point(int x, int y) {}
public static void main(String[] args) {
Object obj = new Point(3, 4);
if (obj instanceof Point(int x, int y)) {
System.out.println("Sum: " + (x + y));
}
}
}Składowe stają się zmiennymi lokalnymi
Nazwy we wzorcu (x, y) to nowe zmienne lokalne przechowujące wartości składowych rekordu. Nazwy wybiera Pan/Pani samodzielnie — nie muszą odpowiadać nazwom w rekordzie.
public class Main {
record Point(int x, int y) {}
public static void main(String[] args) {
Object obj = new Point(10, 20);
if (obj instanceof Point(int a, int b)) {
System.out.println("a=" + a + " b=" + b);
}
}
}Używanie var we wzorcach
Można użyć var dla składowej, aby kompilator wywnioskował jej typ. Jest to przydatne, gdy typy są długie.
public class Main {
record Pair(String key, Integer value) {}
public static void main(String[] args) {
Object obj = new Pair("age", 30);
if (obj instanceof Pair(var key, var value)) {
System.out.println(key + " = " + value);
}
}
}Wzorce w switch
Wzorce rekordów działają również w instrukcji switch, dzięki czemu gałęzie case przypominają kształty danych.
public class Main {
record Point(int x, int y) {}
static String classify(Object obj) {
return switch (obj) {
case Point(int x, int y) when x == y -> "on diagonal";
case Point(int x, int y) -> "at " + x + "," + y;
default -> "not a point";
};
}
public static void main(String[] args) {
System.out.println(classify(new Point(5, 5)));
System.out.println(classify(new Point(1, 2)));
}
}Dopasowanie z inferencją typu
Typy składowych we wzorcu muszą być zgodne z typami zadeklarowanymi w rekordzie. Bezpiecznym wyborem jest użycie dokładnego typu lub var.
Łączenie z warunkami
Po wzorcu rekordu można dodać warunek when, aby dopasowanie następowało tylko wtedy, gdy zdestrukturyzowane wartości spełniają określony warunek.
public class Main {
record Temperature(double celsius) {}
static String alert(Object o) {
if (o instanceof Temperature(double c) && c > 38.0) {
return "fever: " + c;
}
return "normal";
}
public static void main(String[] args) {
System.out.println(alert(new Temperature(39.5)));
System.out.println(alert(new Temperature(36.6)));
}
}Czytelniejszy dostęp do danych
Wzorce rekordów są szczególnie przydatne, gdy potrzebne jest tylko kilka pól. Eliminują łańcuch wywołań akcesorów i jasno pokazują istotne dane w miejscu dopasowania.
Null i wzorce rekordów
Podobnie jak wszystkie wzorce instanceof, wzorzec rekordu ma wartość false dla null. Destrukturyzacja następuje dopiero po potwierdzeniu, że wartość jest niepustą instancją rekordu.
Praktyczny przykład
Proszę przeprowadzić destrukturyzację, aby bezpośrednio obliczyć wartość ze składowych.
public class Main {
record Rectangle(int width, int height) {}
static int area(Object o) {
if (o instanceof Rectangle(int w, int h)) {
return w * h;
}
return 0;
}
public static void main(String[] args) {
System.out.println(area(new Rectangle(4, 5)));
System.out.println(area("not a rect"));
}
}Szybkie sprawdzenie
Proszę sprawdzić swoje rozumienie wzorców rekordów.
Podsumowanie
Poznał(a) Pan/Pani wzorce rekordów.
- Sprawdzają one typ rekordu i jednocześnie przeprowadzają destrukturyzację jego składowych.
- Nazwy składowych są wybieranymi przez Pana/Panią nowymi zmiennymi lokalnymi;
varpozwala wywnioskować typy. - Działają zarówno w
instanceof, jak i wswitch. - Podobnie jak wszystkie wzorce, mają wartość false dla null.
Często zadawane pytania
Czy lekcja „Wzorce rekordów” jest bezpłatna?
Tak — pełny tekst „Wzorce rekordów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Wzorce rekordów”?
Destrukturyzowanie rekordów we wzorcach Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Wzorce rekordów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.