Nowa wersja Java 15 jest już dostępna (miała premierę 15.09.2020). Jak zwykle po premierze każdej wersji robię zestawienie funkcjonalności dostępnych w nowej wersji Javy.
Skupiam się przy tym na funkcjonalnościach najbardziej przydatnych dla każdego developera, czyli w skrócie na nowych funkcjach języka Java. Java 15 wprowadza 14 JEPów (
JDK Enhancement Proposal). Pięć z nich to zmiany w języku Java (zapowiedzi lub kolejne zapowiedzi).
Text Blocks
To funkcjonalność, której pierwsza zapowiedź pojawiła się w Javie 13. I w wersji 15 wchodzi już na stałe. W skrócie funkcjonalność ta pozwala na wielolinijkowe bloki tekstu.
Teraz taki kod:
String html = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html>\n";
Można zastąpić takim:
String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;
I w sumie fajnie, że ta funkcjonalność w końcu pojawiła się w Javie 15. Inne języki mają takie funkcje od wieków 😉
Link: JEP 378
Records (Second Preview)
Kolejna ciekawa funkcjonalność to klasy rekord, które pojawiły się jako pierwsza zapowiedź w Javie 14. I teraz mamy drugą zapowiedź tej funkcjonalności. O Rekordach nagrałem video, w którym mówię o większości rzeczy, które są z nimi związane:
Od Javy 14 doszła jeszcze możliwość implementacji Sealed Classes (o tym za chwilę) w Rekordach. To znaczy, że rekord może implementować typ, który jest Sealed (nie wiem, czy dobrze ująłem to w słowach 😉).
Doszła także możliwość tworzenia lokalnych rekordów, czyli można zdefiniować taki rekord wewnątrz metody, nie musi się on znajdować w osobnym pliku.
Link: JEP 384
Sealed Classes (Preview)
Pierwsza z nowości w tej wersji Javy, która pojawia się jako zapowiedź to Sealed Classes, czyli zapieczętowane klasy. 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 o to 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: JEP 360
Hidden Classes
Kolejna nowość to Hidden Classes, czyli klasy ukryte. I od razu zaznaczę, że nie jest to funkcjonalność, którą będzie można używać na co dzień. Klasy ukryte są adresowane głównie do twórców narzędzi: frameworków i bibliotek. Klasy takie nie będą widoczne i nie będzie się można do nich odwołać w normalny sposób z kodu. Będą jedynie dostępne poprzez refleksję. Ten mechanizm pomaga ukrywać pewne wewnętrzne mechanizmy różnych frameworków i zabezpiecza przed nieodpowiednim używaniem wewnętrznych klas różnych narzędzie.
Link: JEP 371
Pattern Matching for instanceof (Second Preview)
Pierwsza zapowiedź tej funkcjonalności pojawiła się w Javie 14. W wersji 15 nic właściwie się nie zmieniło, developerzy Javy postanowili po prostu zebrać więcej informacji od użytkowników tych funkcjonalności.
Link: JEP 375
Reimplement the Legacy DatagramSocket API
Przeimplementowano api DatagramSocket API tak, żeby było łatwiejsze w użyciu i bardziej przypominało nowoczesne api. Stare api było obecne w Javie od wersji 1.0 (czyli od 1996 roku).
Link: JEP 373
Pozostałe
Edwards-Curve Digital Signature Algorithm (EdDSA)
Dodano nowy algorytm kryptograficzny Edwards-Curve Digital Signature Algorithm (EdDSA)
Link: JEP 339
ZGC: A Scalable Low-Latency Garbage Collector
Garbage collector ZGC przechodzi z fazy eksperymentalne do fazy produkcyjnej. Jest to GC, który zapewnia bardzo małe opóźnienia.
Link: JEP 377
Shenandoah: A Low-Pause-Time Garbage Collector
Kolejny garbage collector, który przechodzi z fazy eksperymentalnej do fazy produkcyjnej. Shenandoah został przedstawiony po raz pierwszy w Javie 12. Jest to GC, który zapewnia bardzo pauzy przy odśmiecaniu pamięci, ponieważ odśmiecanie działa równolegle z działaniem aplikacji.
Link: JEP 379
Foreign-Memory Access API (Second Incubator)
Kolejna odsłona api, które pozwala na dostęp do zewnętrznej pamięci (pamięci poza stertą aplikacji).
Link: JEP 383
Usunięto lub wyłączono
Remove the Nashorn JavaScript Engine
Usunięto silnik Javascript Nashorn.
Link: JEP 372
Disable and Deprecate Biased Locking
Wyłączono i zdepreconowano przestarzały system synchronizacji.
Link: JEP 374
Deprecate RMI Activation for Removal
Zdeprecjonowano RMI Activation i oznaczono do usunięcia.
Link: JEP 385
Remove the Solaris and SPARC Ports
Usunięto porty Solaris i SPARC
Link: JEP 381
Poprzednie wersje Javy
Zmiany w Javie od wersji 8 do Java 11
Żródło:
https://openjdk.java.net/projects/jdk/15/