Kurs Java

Premiera Javy 16 GA

Dzisiaj przyjrzymy się, co nowego pojawia się w Javie 16, która swój debiut w wersji GA ma 16 marca. Jak widać, ponownie dzień miesiąca wydania zgadza się z numerem wersji Javy. Ciekawe co będzie, gdy dojedziemy do wersji 32, co biorąc pod uwagę tempo wydawania kolejnych wersji, nie wydaje się wcale tak odległą perspektywą (jedyne...8 lat). Na szczęście nie musimy się tym teraz zajmować. Obecnie interesuje nas to, czego możemy się spodziewać po wersji 16. Zatem zaczynamy...

Java 16 - 16 marca 2021

  • Rekordy

    Rekordy omawialiśmy już w artykule Kolejne nowości w Javie 14 oraz wspominaliśmy w Java 15 już we wrześniu. Wreszcie pojawiła się finalna wersja tego rozwiązania. O co w tym chodzi? Otóż jednym z najczęstszych problemów związanych z Javą jest to, że aby klasa była użyteczna, trzeba napisać sporo powtarzalnego kodu, na przykład:
    • toString()
    • hashCode
    • equals
    • gettery
    • publiczne konstruktory

    W przypadku prostych klas domenowych metody te są zwykle nudne, powtarzalne i takie, które można łatwo wygenerować mechanicznie. O ile środowiska IDE często zapewniają taką możliwość (lub dodatkowe biblioteki takie jak Lombok), o tyle sam język do tej pory nie zapewniał żadnego sposobu, aby to zrobić.

    Celem rekordów jest rozszerzenie składni języka Java i stworzenie sposobu na określenie, że dana klasa to „pola i tylko pola”. Dla takiej klasy kompilator może wygenerować wszystkie metody automatycznie, uwzględniając wszystkie pola uczestniczące w metodach, takich jak hashCode czy equals.

    Tak więc teraz, zamiast tworzyć klasę taką jak poniżej:
    class Point {
    
        private final int x;
        private final int y;
    
        Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        int x() { return x; }
        int y() { return y; }
    
        public boolean equals(Object o) {
            if (!(o instanceof Point)) return false;
            Point other = (Point) o;
            return other.x == x && other.y == y;
        }
    
        public int hashCode() {
            return Objects.hash(x, y);
        }
    
        public String toString() {
            return String.format("Point[x=%d, y=%d]", x, y);
        }
    }
    
    wystarczy stworzyć rekord:
    record Point(int x, int y) { }
    
    I tyle. Tak, to właśnie takie proste!
  • Pattern Matching for instanceof

    Finalna wersja rozwiązania, które omawiamy w artykule Java 14 już na horyzoncie. Do podanego tam przykładu dołóżmy jeszcze jeden. Teraz zamiast takiego kodu:
        public boolean equals(Object o) {
            if (!(o instanceof Point))
                return false;
            Point other = (Point) o;
            return x == other.x
                && y == other.y;
        }
    
    możemy wykonać taki, dużo prostszy zapis:
        public boolean equals(Object o) {
            return (o instanceof Point other)
                && x == other.x
                && y == other.y;
        }
    
    Jak widać, kod od razu staje się bardziej czytelny.
  • Sealed classes [preview]

    Sealed classes omawialiśmy już w artykule Java 15 już we wrześniu. Funkcjonalność nadal istnieje w postaci preview. Więcej o tych klasach napiszemy, gdy staną się rozwiązaniem finalnym.
  • Elastyczny metaspace

    Poprawia alokację i zwalnianie pamięci metaspace w HotSpot JVM, co znacznie zmniejsza obciążenie modułu ładującego klasy oraz fragmentację pamięci. W przypadku kodu działającego przez dłuższy czas, np. na serwerze po stronie backendu aplikacji może to znacznie poprawić wydajność działania systemu.
  • Migracja z Mercurial-a to Git-a

    Do tej pory kod źródłowy OpenJDK był przechowywany w systemie kontroli wersji Mercurial. Teraz projekt został przeniesiony do Git-a, a konkretnie do GitHub-a, gdzie będzie można go znaleźć pod adresem: https://github.com/openjdk.
  • Przeniesienie JDK na Alpine Linux

    Przeniesienie JDK na Alpine Linux i na inne dystrybucje Linuksa, które używają musl * jako podstawowej biblioteki C, zarówno na architekturach x64, jak i AArch64. Dystrybucja Linuxa Alpine Linux ze względu na małe rozmiary obrazów jest szeroko stosowana w środowiskach chmurowych. Dodatkowo używając konsolidatora jlink, programista może zmniejszyć rozmiar środowiska wykonawczego aplikacji Java, używając tylko modułów wymaganych do uruchomienia aplikacji.

    * musl to standardowa biblioteka C przeznaczona dla systemów operacyjnych opartych na jądrze Linux, wydana na licencji MIT.
  • Włączenie funkcji języka C++ 14

    W procesie kompilacji kodu źródłowego JDK zostaną włączone funkcje C++. Oznacza to, że kod będzie kompilowany z opcją std = c ++ 14 na wszystkich platformach (Windows, Linux, macOS...). Do wersji JDK 15, funkcje C++ były ograniczone do standardów języka C++ 98/03.
  • Obliczenia wektorowe [inkubator]

    Rozwiązanie, które umożliwia wykonywanie obliczeń wektorowych (SIMD). Ta funkcjonalność jest na razie w inkubatorze, a więc kod znajduje się w pakiecie jdk.incubator.vector. Obliczenia wektorowe są obsługiwane przez instrukcje sprzętowe (gdy takowe są dostępne, np. SSE, AVX).
Oprócz powyższych nowości/zmian wprowadzono jeszcze kilka innych, w naszym odczuciu mniej istotnych. Pełna lista dostępna jest pod adresem: https://openjdk.java.net.

Okazuje się, że Java 16 to całkiem fajna Java. Z jednej strony postawiono w niej na wydajność (na przykład elastyczny metaspace), a z drugiej niektóre istotne tematy wreszcie doczekały się finalizacji. Bardzo podobają nam się rekordy i "nowy" instanceof, ponieważ lubimy wszelkiego rodzaju uproszczenia. Dodatkowy plus za to, że OpenJDK zaparkował wreszcie na GitHubie.

Na koniec przypominamy, że działające przykłady z rekordem oraz operatorem instanceof można znaleźć już od dawna w naszym Kursie Java 8 do 14 i dalej. Po podpięciu Javy 16 nie będzie już nawet konieczne włączanie trybu preview.
Autor: Jarek Klimas
Data: 16 marca 2021
Labele:Backend, Poziom średniozaawansowany, Java Linki:
https://openjdk.java.net
Masz swoje przemyślenia na temat artykułu? Podziel się nimi!
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!

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy: stackshare
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .


Pozycjonowanie stron: Grupa TENSE