Adam Kukołowicz
Adam KukołowiczCo-founder @ Bulldogjob

Java 20 już dostępna. Sprawdź, co nowego

Wyszła już 20 wersja Javy. Przyglądamy się nowościom.
21.03.20232 min
Java 20 już dostępna. Sprawdź, co nowego

Dziś została wydana Java 20, zgodnie zresztą z półrocznym cyklem wydawniczym. W tym wydaniu mamy 7 nowych JEP-ów (Java Enhancement Proposal). Trzeba powiedzieć, że nie są to zmiany rewolucyjne, większość z nich to rozwinięcie wcześnie wprowadzonych koncepcji. Jest natomiast jedna składniowa nowość. Zobaczmy więc, co nowego w Javie 20.

JEP 429 - Scoped Values

Scoped values w Java umożliwiają bezpieczne i efektywne współdzielenie danych między komponentami w dużych programach bez przekazywania argumentów. Takie wartości mają wiele wcieleń, po jednym dla każdego wątku, i są niemutowalne. Zwykle są deklarowane jako finalne pole statyczne, a wiązanie do nich są tworzone podczas wywołania metody run(...), a niszczone gdy się zakończy. W praktyce kod wygląda tak:

final static ScopedValue<...> V = new ScopedValue<>();

// In some method
ScopedValue.where(V, <value>)
           .run(() -> { ... V.get() ... call methods ... });

// In a method called directly or indirectly from the lambda expression
... V.get() ...


To sprawia, że ograniczony jest czas, w którym wątek może odczytywać tą wartość. Na razie funkcja wylądowała w inkubatorze.

Inne nowości w fazie preview

Tu mamy już funkcje, które pojawiają się w Javie już od jakiegoś czasu, ale jeszcze nie są stabilne.

Pierwszą z nich jest JEP-432 Record Patterns. Chodzi tu o dopasowanie do wzorca, który w tym wypadku dotyczy rekordów. Funkcja pojawiła się pierwszy raz w Javie 19. W zasadzie główną nowością w tym wydaniu jest to, że można teraz stosować takie dopasowania do klas generycznych:

record Box<T>(T t) {}

static void test1(Box<String> bo) {
    if (bo instanceof Box<String>(var s)) {
        System.out.println("String " + s);
    }
}


Ta zmiana ma też odzwieciedlenie w propozycji dla wyrażeń switch (JEP 433: Pattern Matching for switch), gdzie również można używać rekordów generycznych. Nieznacznie zmieniła się też gramatyka.

Kolejnych poprawek doczekały się wirtualne wątki (JEP-436) i API funkcji obcych (JEP-434). Trzeba jednak powiedzieć, że w obydwu przypadkach zmiany są drobne.

W inkubatorze… bez zmian

Do inkubatora ponownie trafiły dwie funkcje JEP 437: Structured Concurrency i JEP 438: Vector API. Co ciekawe nie pojawiły się w nich praktycznie żadne zmiany, poza dobnymi bug fixami. Twórcy Javy zachęcają do poeksperymentowania z nimi i przekazania feedbacku. Więc jeżeli chcesz mieć wpływ na przyszłość Javy, to jest to dobry moment.

Co dalej?

Nowe wydanie nie porywa, ale jest ku temu dobry powód. Java już zaadresowała wiele największych problemów, które trapiły ją od lat. Teraz przechodzi w fazę spokojniejszego rozwoju i duże nowości nie będą się pojawiać tak często.

Dodatkowo kolejnym krokiem będzie Java 21 - wydanie LTS, czyli o przedłużonym wsparciu. To zapewne w nim pojawią się na stałe ulepszenia dotyczące dopasowania wzorców, które były głównym motywem rozwoju od Javy 17. Być może jako stabilne wirtualne wątki i API funkcji obcych? W tym momencie nie jest to jeszcze przyklepane.

<p>Loading...</p>