Najnowsza wersja Javy wprowadza, oprócz innych ulepszeń, przydatną składnię dla Records.

Świat programowania Java stale ewoluuje, co wymaga od Ciebie bycia na bieżąco, aby osiągać doskonałe wyniki w swoim fachu.

Java 21 przynosi falę ekscytujących ulepszeń, które rewolucjonizują podejście do współbieżności, operacji gromadzenia danych i pracy z rekordami.

Przedstawiamy wirtualne wątki

Skalowanie aplikacji serwerowych zawsze stanowiło wyzwanie, a wątki często stawały się wąskimi gardłami. Ograniczona liczba wątków w połączeniu z częstym oczekiwaniem na odblokowanie zdarzeń lub blokad utrudnia ogólną wydajność.

W przeszłości rozwiązanie tego problemu wymagało użycia konstrukcji takich jak Ukończona przyszłość Lub ramy reaktywne, co skutkowało zawiłym kodem, który był trudny do zrozumienia i utrzymania.

Na szczęście Java 19 wprowadziła wirtualne wątki jako funkcję podglądu, którą Java 21 udoskonaliła i utrwaliła za pomocą JDK Enhancement Proposal 444.

Wirtualne wątki stanowią wysoce obiecującą alternatywę, pozwalającą skuteczniej radzić sobie z wyzwaniami związanymi ze skalowalnością. Prowadzi to do poprawy wydajności i zwiększonej responsywności aplikacji serwerowych.

instagram viewer

Zsekwencjonowane kolekcje są bardziej użyteczne

Tradycyjnie, używając połączonych list w programowaniu Java wymaga dość rozwlekłego kodu. Na przykład, aby pobrać ostatni element, musisz użyć tego kłopotliwego podejścia:

rozm last = list.get (list.size() - 1);

Jednak Java 21 wprowadza zwięzłą i elegancką alternatywę:

rozm ostatni = lista.pobierzOstatni();

Podobnie dostęp do pierwszego elementu LinkedHashSet wymaga trasy okrężnej:

rozm pierwszy = powiązanyHashSet.iterator().następny();

Ale w Javie 21 to zadanie staje się znacznie prostsze:

rozm pierwszy = powiązanyHashSet.getFirst();

Możesz także uzyskać dostęp do ostatniego elementu LinkedHashSet za pomocą metody new getLast metoda, która pozwala uniknąć iteracji przez cały zestaw.

Te ulepszenia w sekwencjonowanych kolekcjach nie tylko poprawiają czytelność kodu, ale także usprawniają wyszukiwanie elementów, dzięki czemu programowanie w Javie jest bardziej wydajne i przyjazne dla programistów.

Nagrywaj wzorce dla wygody

Wzorce rekordów, wprowadzone jako funkcja podglądu w Javie 19, oferują wygodny mechanizm dostępu do pól rekordu w Javie bez potrzeby jawnych rzutowań lub metod dostępu.

Działają synergicznie z Dopasowanie do wzorca dla instanceof I Dopasowanie wzorca dla przełącznika, znacznie upraszczając kod i poprawiając ogólną czytelność.

Oto ilustracja tej koncepcji z prostym rekordem o nazwie Pozycja:

publiczny nagrywać Pozycja(int X, int y){}

Wcześniej wykonywanie różnych akcji w zależności od klasy obiektu wymagało użycia Dopasowanie do wzorca dla instanceof, jak pokazano w poniższym fragmencie kodu:

publicznypróżniawydrukować(Obiekt o){
Jeśli (o wystąpienie pozycja p) {
System.out.printf(„o to pozycja: %d/%d%n”, p.x(), p.y());
} w przeciwnym razieJeśli (o wystąpienie ciąg s) {
System.out.printf(„o jest łańcuchem znaków: %s%n”, S);
} w przeciwnym razie {
System.out.printf(„o to coś innego: %s%n”, o);
}
}

Z Rekordowe wzorce, możesz teraz bezpośrednio dopasować wzorzec rekordu, np Pozycja (int x, int y) zamiast korzystać z Pozycja str wzór. Umożliwia to dostęp do zmiennych X I y bezpośrednio w kodzie, eliminując potrzebę p.x() I p.y():

publicznypróżniawydrukować(Obiekt o){
Jeśli (o wystąpieniePozycja(int X, int y)) {
System.out.printf(„o to pozycja: %d/%d%n”, x, y);
} w przeciwnym razieJeśli (o wystąpienie ciąg s) {
System.out.printf(„o jest łańcuchem znaków: %s%n”, S);
} w przeciwnym razie {
System.out.printf(„o to coś innego: %s%n”, o);
}
}

Co więcej, możesz użyć Rekordowe wzorce w połączeniu z Dopasowanie wzorca dla przełącznika, aby jeszcze bardziej uprościć kod:

publicznypróżniawydrukować(Obiekt o){
przełącznik (o) {
sprawaPozycja(int X, int y) -> System.out.drukujf(„o to pozycja: %d/%d%n”, x, y);
sprawa String s -> System.out.printf(„o jest łańcuchem znaków: %s%n”, S);
domyślny -> System.out.printf(„o to coś innego: %s%n”, o);
}
}

Zagnieżdżone wzorce rekordów umożliwiają dopasowywanie rekordów, których pola same są rekordami. Rozważmy na przykład rekord o nazwie Ścieżka który obejmuje a z I Do pozycja:

publiczny nagrywać Ścieżka(Pozycja od, Pozycja do){}

Wykorzystując wzorce rekordów, drukowanie a Ścieżka obiekt staje się bardziej zwięzły:

publicznypróżniawydrukować(Obiekt o){
przełącznik (o) {
sprawaŚcieżka(Pozycja od, Pozycja do) -> System.out.drukujf(„o to ścieżka: %d/%d -> %d/%d%n”, od.x(), z.y(), Do.X(), Do.y());
// inne przypadki
}
}

Z pomocą Rekordowe wzorce, obsługa rekordów z polami różnego typu staje się bardziej oczywista i czytelna. Załóżmy, że zmodyfikowałeś rekordy, Pozycja2D I Pozycja3D, Gdzie Pozycjajest interfejsem Java które oba realizują:

publiczny zapieczętowany interfejsPozycjapozwoleniaPozycja2D, Pozycja3D{}
publiczny nagrywać Pozycja2D(int X, int y) wdraża Stanowisko {}
publiczny nagrywać Pozycja3D(int X, int tak, int z) wdraża Stanowisko {}
publiczny rekord Ścieżka < P rozszerza Pozycja > (P od, P do) {}

Aby rozróżnić zachowanie drukowania dla ścieżek 2D i 3D, możesz użyć wzorców rekordów:

publicznypróżniawydrukować(Obiekt o){
przełącznik (o) {
sprawaŚcieżka(Pozycja2D od, Pozycja2D do) -> System.out.drukujf(„o jest ścieżką 2D: %d/%d -> %d/%d%n”, od.x(), z.y(), Do.X(), Do.y());
sprawaŚcieżka(Pozycja3D od, Pozycja3D do) -> System.out.drukujf(„o to ścieżka 3D: %d/%d/%d -> %d/%d/%d%n”, od.x(), z.y(), z.z(), Do.X(), Do.y(), Do.z());
// inne przypadki
}
}

Wzorce rekordów znacznie zmniejszają gadatliwość i poprawiają czytelność kodu w przypadku rekordów zawierających pola różnych typów.

Odblokuj nowe możliwości dzięki Javie 21

Java 21 wprowadza wiele zaawansowanych funkcji, które zwiększają możliwości języka programowania Java. Korzystając z tych ulepszeń, możesz usprawnić procesy programistyczne i odblokować nowe możliwości dla swoich aplikacji.

Bycie na bieżąco z najnowszymi funkcjami językowymi i frameworkami Java umożliwia utrzymywanie wydajnego i łatwego w utrzymaniu kodu, dzięki czemu pozostajesz w awangardzie programowania Java.