Java 16 wprowadza dużo poprawek, które jednak nie dotyczą samego języka. Jak zawsze postaram się omówić tylko to, co przyda się programiście w praktyce. A więc po kolei:
1. JEP 389 – Foreign Linker API (Incubator)
Zmiana ta jest odpowiedzią na potrzebę łatwego dostępu do bibliotek napisanych w językach natywnych, takich jak C++. W tym momencie dostępny jest JNI, który nie jest prosty w użyciu. Dzięki nowemu API programowanie z kodem natywnym powinno w przyszłości być znacznie łatwiejsze.
2. JEP 390 – Warnings for Value-Based Classes
Już w Java 9 konstruktory wraperów (np. Integer, Byte) zostały oznaczone jako Deprecated. Oznacza to, że w przyszłości zostaną usunięte. Zmiana odpowiedzialna za to zamieszanie to migracja do tzw. Value-Based Classes. Postanowiono dodać dodatkowe warningi informujące zawczasu o problemach, które mogą przez to wystąpić. Dlatego też przy użyciu konstruktora wrapera dostaniemy compilation warning. Dodatkowo przy próbie synchronizacji na jakiejkolwiek kasie oznaczonej jako @ValueBased (nie tylko wrapery są nią oznaczone) warning też będzie obecny. Zmiana ta nie ma na razie wpływu na wynik kompilacji i działania programów, jednak warto dokształcić się odnośnie tej migracji, bo jest to zmiana potencjalnie niebezpieczna dla starych programów.
2. JEP 392 – Packaging Tool
Długo oczekiwane narzędzia ułatwiające tworzenie uruchamianych paczek w końcu jest gotowe. Po raz pierwszy napisałem o tym w artykule o Java 14. W Java 16 zmiana dostała ostatnie szlify i jest oznaczona jako production-ready.
3. JEP 393 – Foreign-Memory Access API (Third Incubator)
Znowu funkcja, o której po raz pierwszy usłyszeliśmy przy Java 14. Dalej jest w fazie inkubatora.
4. JEP 394 – Pattern Matching for instanceof.
Kolejna rzecz, która była w fazie preview od Java 14. W Java 16 jest już jako funkcjonalność produkcyjna.
5. JEP 395 – Records.
Rekordy to bardzo fajna funkcja, która też wchodziła w preview w Java 14. W Java 16istnieje już jako funkcjonalność produkcyjna.
6. JEP 397 – Sealed Classes (Second Preview).
Sealed classes to nowość przedstawiona w Java 15. W Java 16 nadal jest w fazie preview.