Java 17 LTS

Java 17 LTS

Kolejna wersja Javy wylądowała. Od 14 września jest już dostępna Java 17. Nowa wersja Javy zawiera aż 14 zmian tzw. JEP (JDK Enhancement Proposal). Mimo tak dużej ilości JEPów, to samych zmian istotnych dla developerów aplikacji jest tak naprawdę niewiele.

Zacznę od tego, że nowa wersja jest wersją z długim wsparciem, czyli LTS (Long Term Support). Ostatnią wersją LTS była Java 11 i od jej wydania minęło już 3 lata, a wersja ta będzie wspierana do sierpnia 2023 roku. Natomiast Java 17 będzie wspierana do 2026 roku. A kolejną wersją LTS będzie Java 21 i będzie miała swoją premierę w 2023 roku, czyli za dwa lata. Jak widać uległ skróceniu okres do wydania następnego LTSa. Co jest pozytywną informacją z racji tego, że większość użytkowników używa właśnie wersji LTS.

Odkąd zmienił się proces wydawniczy Javy korzystam właściwie tylko z wersji LTS, czyli do tej pory były to wersje 8 i 11 (chociaż wersja 8 została wydana jeszcze starym procesem wydawniczym). Tak czy inaczej, już niedługo mam w planach przesiadkę na Javę 17.

Kiedy zmienić wersję Javy?

Oczywiście nowa Java jest jeszcze bardzo świeża, i tak naprawdę nikt nie przesiada się na nową wersję od razu po premierze. Żeby przesiadka na nową wersję była bezbolesna, muszą być spełnione pewne warunki.

Jednym, z takich warunków jest wsparcie w IDE. I tutaj jest całkiem nieźle jeśli używasz IntelliJ IDEA, bo IDEA w ostatniej wersji wspiera już Javę 17.

Kolejna i tym razem ważniejsza rzecz to wsparcie tej wersji Javy we frameworkach, bibliotekach itd. I najważniejszym z takich frameworków jest oczywiście Spring/Spring Boot. Sprawdziłem, i jak na razie ostatnią wspieraną wersją jest Java 16, wiec trzeba jeszcze poczekać, być może kilka tygodni lub miesięcy. Mam nadzieję, że zadzieje się to dosyć szybko. Spring Boot już wspiera Javę 17.

Kolejna rzecz to narzędzia do budowanie Maven i Gradle, one też niedługo powinny zacząć wspierać nową wersję Javy.

Natomiast co z bibliotekami? Niektóre projekty mogą mieć ich dziesiątki, a nawet setki. Czy trzeba czekać aż wszystkie zostaną zaktualizowane do Javy 17? Oczywiście nie. Java jest kompatybilna wstecz, wiec większość bibliotek skompilowanych w niższych wersjach powinna działać bez problemu także w wersji 17.

Java 17 Features

Przejdźmy teraz do omówienia najważniejszych nowości z Javy 17. Nie będę omawiał ich wszystkich z racji tego, że niektóre są naprawdę mało istotne dla większości użytkowników.

Pattern Matching for switch (Preview)

Ta zmiana to właściwie kontynuacja prac nad Pattern Matchingiem w Javie. Wcześniej mieliśmy już zmiany w Javie 14 gdzie wprowadzono Switch Expressions, później doszedł do tego Pattern Matching for instanceof w Javie 16 (JEP-394) i teraz w końcu mamy pierwszą zapowiedź Pattern Matchingu dla instrukcji switch.

A tak mniej więcej będzie to wyglądało w kodzie:

switch (s) {
  case Triangle t && (t.calculateArea() > 100) -> System.out.println("Large triangle");
  case Triangle t -> System.out.println("Small triangle");
  default -> System.out.println("Non-triangle");
}

Czyli w case możemy teraz wstawiać wyrażenia warunkowe, a nie tylko wartości tak jak było to do tej pory.

Link: https://openjdk.java.net/jeps/406

Sealed Classes

W końcu po dwóch zapowiedziach została dodana do Javy funkcjonalność zapieczętowanych klas. Klasa zapieczętowana to taka klasa, która ogranicza możliwość dziedziczenia po niej tylko do klas, które zostaną wylistowane w takiej klasie (służy do tego słowo kluczowe permits).

A oto przykład takiej klasy:

public abstract sealed class Animal permits Cat, Dog, Elephant{...}

I po takiej klasie mogą dziedziczyć tylko wymienione trzy klasy: Cat, Dog, Elephant.

Link: https://openjdk.java.net/jeps/409

Deprecate the Applet API for Removal

Api apletów zostało w końcu oznaczone jako przestarzałe. Trochę dziwię się, że jeszcze nie zostało usunięte. Aplety nie są już powszechnie używane co najmniej od 15 lat, a przynajmniej właśnie jakieś 15 lat temu ostatnio widziałem działający aplet. Rozumiem, że są jeszcze firmy, które mają jakiś archaiczny soft, którego używają wewnętrznie i dlatego tak długo to api jest w Javie. Ale takie firmy chyba raczej nie aktualizują wersji Javy? Skoro mają aplikacje w apletach, to też muszą używać starych przeglądarek, bo chyba żadne z obecnych na rynku już dawno nie wspiera apletów. Google Chrom przestał wspierać aplety w 2015 roku.

Link: https://openjdk.java.net/jeps/398

Deprecate the Security Manager for Removal

Security Manager został oznaczony do usunięcia. To jedna z tych rzeczy w Javie, o której wiedziałem, że istnieje, ale nie wiedziałem jak i gdzie tego używać. Wprawdzie kiedyś próbowałem się dowiedzieć jak można z tego skorzystać, ale nie ma zbyt wiele informacji na ten temat, więc moja wiedza o Security Managerze jest nadal znikoma. I jak widać narzędzie jest chyba mało przydatne skoro będzie w niedalekiej przyszłości usunięte 😉

Link: https://openjdk.java.net/jeps/411

Gdzie pobrać Javę 17?

JDK Javy 17 można pobrać z kilku źródeł. Jest oczywiście oficjalne wydanie Open JDK i można je pobrać z ich strony tutaj. Można też pobrać Javę 17 od innych dostawców, ale jeszcze nie wszyscy wydali swoją wersję nowego JDK.

Podsumowanie

Tak jak wspominałem, nowości jest całkiem sporo, ale nie są one aż tak istotne dla przeciętnego developera. Dlatego nie opisuję tu wszystkich JEPów. Ostatnie wersje przynoszą bardzo niewiele zmian w samym języku Java, a za to jest całkiem sporo różnego rodzaju drobnych usprawnień dla całej platformy.

Pozostałe nowości znajdziesz na liście poniżej:

Restore Always-Strict Floating-Point Semantics
Enhanced Pseudo-Random Number Generators
New macOS Rendering Pipeline
macOS/AArch64 Port
Remove RMI Activation
Remove the Experimental AOT and JIT Compiler
Foreign Function & Memory API (Incubator)
Vector API (Second Incubator)
Context-Specific Deserialization Filters

Całą listę nowości znajdziesz tutaj: https://openjdk.java.net/projects/jdk/17/

 

Mateusz Dąbrowski

Cześć jestem Mateusz, zajmuję się programowaniem już ponad 12 lat z czego ponad 8 programuję w Javie. Zapraszam Cię do lektury mojego bloga. Możesz przeczytać więcej o mnie >>TUTAJ<<

2 thoughts to “Java 17 LTS”

  1. Podoba mi sie że przedstawiłeś zmiany z których normalny użytkownik javy będzie korzystał. Super artukuł!

Komentarze są zamknięte.