Java 21, wydana 19 września 2023 roku, jest kolejną wersją LTS (Long-Term Support) języka programowania Java.
W tej wersji wprowadzono szereg nowych funkcjonalności i ulepszeń.
Z ciekawszych nowości pojawiła się stabilna wersja wątków wirtualnych, a także rozwiązania ułatwiające szybkie kodowanie.
Java 21 - 19 września 2023
-
Record Patterns
Finalna wersja. Wzorce rekordów umożliwiają dekonstrukcję wartości rekordów, co sprawia,
że możemy uzyskać dostęp do indywidualnych składników rekordu w sposób bardziej zwięzły i zrozumiały.
Na przykład, jeśli mamy rekord Person, wzorce rekordów umożliwiają rozpakowanie jego wartości
do zmiennych w jednym wyrażeniu.
-
Pattern Matching dla switch
Finalna wersja. Dopasowywanie wzorców w instrukcji switch umożliwia wykonywanie różnych działań w zależności
od typu lub wartości sprawdzanej zmiennej, co sprawia, że kod jest czytelniejszy i bezpieczniejszy.
-
String Templates [preview]
Szablony łańcuchów znaków pozwalają na osadzanie wyrażeń bezpośrednio w tekście, co ułatwia formatowanie łańcuchów znaków.
-
Unnamed Patterns and Variables [preview]
Nienazwane wzorce i zmienne pozwalają na dopasowywanie i inicjowanie zmiennych bez konieczności nadawania im nazw, co może być przydatne w niektórych scenariuszach.
-
Unnamed Classes and Instance Main Methods [preview]
Ta funkcja ma na celu ułatwienie nauki Javy dla początkujących programistów, pozwalając na tworzenie prostszych deklaracji klas i metod.
I tak na przykład tradycyjnie w Javie, aby napisać program wydrukujący "Hello, World!" na konsoli,
należy zdefiniować klasę z metodą main oznaczoną jako static.
W Javie 21, możesz to zrobić w sposób bardziej zwięzły:
-
Virtual Threads
Virtual Threads upraszczają pisanie, utrzymanie i obserwowanie aplikacji o wysokiej przepustowości działających współbieżnie.
Są one lekkimi wątkami, które mają na celu zminimalizowanie wysiłku związanego z zarządzaniem współbieżnością w aplikacjach Java.
Virtual Threads zostały wprowadzone jako funkcja podglądowa w JDK 19 i ponownie jako funkcja podglądowa
w JDK 20, aby zebrać opinie i doświadczenie przed ich ostatecznym umieszczeniem w JDK 21. W tej wersji, na podstawie opinii deweloperów, dokonano kilku zmian.
Głównymi celami wprowadzenia wątków wirtualnych są:
-
Umożliwienie skalowania aplikacji serwerowych napisanych w prostym stylu jeden wątek na żądanie z niemal optymalnym wykorzystaniem sprzętu.
-
Umożliwienie istniejącemu kodowi, który korzysta z API java.lang.Thread, przyjęcie wątków wirtualnych z minimalną zmianą.
-
Ułatwienie diagnozowania problemów, debugowania i profilowania wątków wirtualnych za pomocą istniejących narzędzi JDK.
-
Sequenced Collections
Istniejące do tej pory List i Deque
definiują kolejność, ale ich wspólny supertyp, Collection, nie definiuje.
Podobnie, Set nie definiuje kolejności, a podtypy takie jak HashSet
nie definiują jednego, ale podtypy takie jak SortedSet i LinkedHashSet tak.
Obsługa kolejności jest więc rozproszona w hierarchii typów, co sprawia, że trudno jest wyrażać pewne przydatne koncepcje
w interfejsach.
W odpowiedzi na te problemy wprowadzono nowe interfejsy reprezentujace kolekcje ze zdefiniowanym porządkiem.
Każda taka kolekcja ma dobrze zdefiniowany pierwszy element, drugi element, i tak dalej,
aż do ostatniego elementu.
Zostały również wprowadzone jednolite interfejsy API umożliwiające dostęp do pierwszych
i ostatnich elementów, a także przetwarzanie elementów w odwrotnej kolejności.
-
Scoped Values
Scoped Values umożliwiają bezpieczne i wydajne współdzielenie niemutowalnych danych w obrębie i między wątkami,
ułatwiając zarządzanie danymi w środowisku wielowątkowym. Są to wartości, które mogą być traktowane jako niejawne
parametry metod, przekazywane poprzez sekwencję wywołań metod, co jest korzystne, gdy używa się dużej liczby wątków wirtualnych.
W powyższym kodzie, tworzony jest nowy obiekt Scoped,
a następnie nastepuje wiązanie wartości "Hello, world!" z obiektem Scoped w bieżącym zakresie.
Wewnątrz tego zakresu, można uzyskać
dostęp do związanej wartości używając metody get() na obiekcie Scoped.
Po opuszczeniu zakresu, wartość zostanie automatycznie odwiązana (nie można już uzyskać wartości).
Podsumowując, Java 21 przynosi szereg innowacji ułatwiających pracę programistom (choć część z nich jest dostępna tylko w trybie preview).
Nowości obejmują stabilną wersję wątków wirtualnych, wzorce rekordów, dopasowywanie wzorców dla switch, szablony łańcuchów znaków, nienazwane wzorce, zmienne, klasy oraz metody instancji main, co znacząco upraszcza naukę Javy dla początkujących. Dodatkowo wprowadzono Sequenced Collections oraz Scoped Values, które poprawiają zarządzanie danymi w aplikacjach wielowątkowych. Te zmiany zwiększają czytelność kodu, ułatwiają diagnozowanie problemów i oferują wydajne rozwiązania dla współbieżności, co czyni Javę 21 ważnym krokiem naprzód w ewolucji tego języka programowania.
Pełna lista zmian jest dostępna pod linkiem podanym na końcu rozdziału.
Szukasz dobrego kursu nowej Javy? Mamy dla Ciebie kurs oparty na 150 przykładach.
Kurs nowej Javy składa się z kursu Javy 8 oraz Javy od wersji 9 do 17.
Autor: Jarek Klimas
Data: 17 października 2023
Labele:Backend, Poziom podstawowy, Java
Linki:
openjdk.org/projects/jdk/21
Masz pytanie odnośnie zagadnienia omawianego w artykule?
Coś, co napisaliśmy, nie zaspokoiło Twojego głodu wiedzy?
Daj nam znać co myślisz i skomentuj artykuł na facebooku!