Ta strona wykorzystuje pliki cookie w celu prezentacji dopasowanych dla Ciebie treści. Możesz włączyć/wyłączyć obsługę plików cookies w swojej przeglądarce.

Dowiedz się więcej
Java 17 - Technologia na miarę 2022

Java 17 - Technologia na miarę 2022

Opublikowano  przez Ewa Kaczmarz-Wawryk

W połowie roku 2021 świat przywitał nową wersję Javy z długoterminowym wsparciem. Czy Java 17 rzeczywiście wyprzedza epokę i jest technologią godną nowego roku? W naszym artykule przeczytasz o tym, co przełomowego i ciekawego ma do zaoferowania nowy LTS Javy.

W wielu językach programowania możemy określać dostępność do poszczególnych fragmentów kodu za pomocą specjalnych słów kluczowych zwanych modyfikatorami dostępu. Dzięki nim możemy wskazać, czy elementy danej klasy, interfejsu lub pakietu mogą być implementowane z poziomu innych części oprogramowania.

Zapieczętowane klasy — bardziej precyzyjna kontrola dostępu (Sealed classes)

Stosunkowo nowym wynalazkiem w Javie są klasy zapieczętowane (ang. sealed classes), które pozwalają jeszcze precyzyjniej kontrolować rozszerzanie i implementację klas, pakietów i interfejsów. Klasy te poprzedza się słowem kluczowym sealed, a za pomocą słowa permits można określić dla nich typy pochodne. Dzięki temu możemy np. wskazać konkretne implementacje dla danego interfejsu. W Javie 17 klasy zapieczętowane osiągają status w pełni sprawnej i dopracowanej funkcjonalności. Ze względu na to stały się integralną częścią naszego kursu Java Developer.

Kurs Java Developer

Nowości w generowaniu liczb pseudolosowych (Enhaced PRNG)

Tworząc oprogramowanie, niejednokrotnie spotykamy się z koniecznością wytwarzania losowych liczb (choćby dla potrzeb testów). Najczęściej liczby te nie są tak naprawdę w stu procentach losowe, ale przyjmują wartości zależnie od początkowych danych, dlatego nazywa się je pseudolosowymi.

W kolejnej wersji LTS Javy zmienił się nieco sposób generowania wartości przez tzw. generator liczb pseudolosowych (PRNG). Usunięty zostaje zduplikowany kod w klasach generatora, a dodatkowo pojawia się klasa `RandomGeneratorFactory`, która umożliwia tworzenie generatorów ze zdefiniowanym algorytmem. Oznacza to, że programistom łatwiej będzie sterować losowością wytwarzanych liczb.

Silniejsza enkapsulacja i większe bezpieczeństwo (Strongly Encapsulate JDK Internals)

Enkapsulację najprościej można wytłumaczyć jako ukrywanie poszczególnych elementów oprogramowania, czyli czyli pisanie ich w taki sposób, by były w pewnym stopniu utajone dla pozostałej części kodu. Czasem enkapsulację nazywa się też hermetyzacją lub potocznie kapsułkowaniem (można posłużyć się metaforą, że poszczególne obiekty ujęte są w oddzielne kapsułki).

W JDK 17 większość elementów JDK (z wyjątkiem krytycznych interfejsów API, takich jak sun.misc.Unsafe) podlega jeszcze silniejszej enkapsulacji. Zablokowany zostaje dostęp do wewnętrznych interfejsów API za pomocą polecenia --illegal-access. Ma to zachęcić programistów do korzystania ze standardowych interfejsów API zamiast interfejsów wewnętrznych, by zwiększyć bezpieczeństwo aplikacji.

Prostsza logika w kodzie dzięki dopasowaniu wzorca dla wyrażenia switch(Pattern Matching for switch)

Wyrażenie switch ułatwia pisanie kodu w Javie (i nie tylko), pozwalając na weryfikację prawdziwości warunków bez tworzenia rozbudowanych sekwencji if-else. To bardzo upraszcza kod, a dodatkowo pozwala lepiej zarządzać pamięcią.

Dzięki zmianom w Javie 17 dla wyrażeń switch zostanie wprowadzone tzw. dopasowanie wzorca typu. Poprawie ulega obsługa typów, zakres zmiennych, w ramach wyrażenia switch, łatwiej będzie też poradzić sobie z nullami i uzyskać pełne pokrycie kodu. Wprowadzone zmiany zyskują obecnie status Preview, a co za tym idzie stają się w pełni zaimplementowaną (ale nie domyślną) funkcją w języku Java.

Na spotkanie z obcym kodem — Inkubator (Foreign Function & Memory API)

Czym jest inkubator w Javie? W najprostszym ujęciu — to po prostu zbiór modułów i różnorodnych API dostarczających innowacyjnych funkcjonalności.

Foregin Function Memory API również wchodzi w skład Inkubatora i umożliwia programom w Javie pracę z danymi spoza wirtualnego środowiska Javy. Dzięki nim możliwe jest m.in. uzyskiwanie dostępu do obcej pamięci, wywoływanie przez kod obcych funkcji, czy sterowanie cyklem obych zasobów.To bardzo poszerza możliwości języka Java.

Bardziej precyzyjna deserializacja (Context-Specific Deserialization Filters)

Na początek warto wyjaśnić, czym jest deserializacja. Jest to proces odwrotny do serializacji, który polega na zamianie zewnętrznej informacji o złożonym (najczęściej zapisanej w formacie JSON lub XML) obiekcie na ten właśnie obiekt. W przypadku deserializacji rozbudowanych obiektów wykorzystuje się filtry, aby uniknąć luk w kodzie i zwiększyć bezpieczeństwo aplikacji.

Java 17 pozwala tworzyć dynamiczne i kontekstowe filtry do deserializacji, korzystając z tzw. fabryki filtrów i umożliwiają programistom filtrowanie informacji zależnych od strumienia obiektów.

Java 17 to LTS wprowadzający szereg nowych i użytecznych funkcjonalności w programowaniu obiektowym. Zmiany dotyczą różnych aspektów pisania kodu — od kontroli dostępu, przez generowanie liczb pseudolosowych, aż po korzystanie z obcych danych. Oczywiście języki programowania stale się rozwijają, a tworzenie sprawnych i funkcjonalnych aplikacji wymaga korzystania z funkcji rozwijanych w ramach kilku wersji technologii. Ze względu na to warto postawić na kompleksowy kurs języka programowania, w którym poznasz zarówno nowsze, jak i starsze, wciąż jeszcze używane technologie.

Chcesz poznać więcej tajników programowania?

SKONTAKTUJ SIĘ Z DORADCĄ