Java 15

Java 15 lista nowości

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

Java 12 nowości

Java 13 przegląd nowości

Java 14 nowości

 

Żródło:

https://openjdk.java.net/projects/jdk/15/

 

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<<