Zmiany w java 8


Zmiany w java 8

Tym wpisem rozpoczynam serię wpisów o Java 8 która niesie za sobą bardzo dużo nowości. Jest to najbardziej rewolucyjna wersja od czasu kiedy wydano wersję Java 5 a był to rok 2004 w, której wprowadzono mechanizm szablonów – typy generyczne, pętle for each, autoboxing oraz typy wyliczeniowe (z ang. enum). Kolejne wersje Javy przynosiły raczej drobne zmiany kosmetyczne, natomiast w Java 8 wprowadzone zostały elementy programowania funkcyjnego.

Czy wprowadzenie elementów znanych np. z Pythona do języka, który jest ściśle obiektowy to dobre rozwiązanie? Oceń to sam, czytając ten artykuł.

Znalezione obrazy dla zapytania java 8

Zmiany w interfejsach

Od wersji Javy 8, istnieje możliwość nie tylko deklaracji metod, ale i również ich definicji (metody domyślne) w interfejsach. Takie rozwiązanie umożliwia tworzenie metod, które nie muszą być definiowane w klasach implementujących dany interfejs. Ponadto interfejsy mogą posiadać metody statyczne, które w odróżnieniu od metod niestatycznych nie mogą by nadpisywane w klasach realizujących dany interfejs. Zaciera się granica pomiędzy klasą abstrakcyjną a interfejsem…

Metody domyślne mają zapobiec sytuacjom gdy interfejs ma wiele implementacji i zostanie dodana metoda która dla wielu z nich będzie taka sama. I to był właśnie zamysł twórców tego rozwiązania. Do wersji Javy 8 interfejs był zatem zamknięty na rozszerzenie. Z reguły natomiast interfejs nie powinien ulegać modyfikacjom.  Wyobraźmy sobie sytuację w której zmienia się choćby jedna z metod interfejsu używanego do projektowania aplikacji mobilnych. Wszystkie aplikacje realizujące wyżej wymieniony interfejs będą posiadać w tym wypadku błędy. Skupmy się zatem na projektowaniu interfejsu a nie na jego konkretnej implementacji.

Wyrażenia lambda

Wyrażenia lambda to funkcje anonimowe, czyli takie, które nie posiadają nazwy. Anonimowa bowiem implementacja interfejsu funkcyjnego – interfejs tylko i wyłącznie z jedną deklaracją metody (pojęcie wprowadzone w Java 8), może być zastąpiona przez wyrażenie lambda. Co nam to daje? Otóż pisząc kod źródłowy myślimy o tym co ma zostać wykonane a nie jak w programowaniu imperatywnym o tym jakie powinny być kolejne kroki algorytmu, kod staje się bardziej zwięzły i przejrzysty.

Składnia wyrażenia lambda przedstawia się następująco:

(type1 arg1, type2 arg2…) -> { body }

Po lewej stronie znajdują się argumenty przekazywane do funkcji, natomiast po prawej stronie jej definicja.

Strumienie

Strumienie (nie należy mylić pojęcia strumienia ze strumieniami wejścia/wyjścia – z ang. I/O) są wygodną konstrukcją języka Java 8, która pozwala na wykonywanie operacji na elementach kolekcji (potok) bez konieczności magazynowania tych danych. Strumień zatem jest to sekwencja elementów, na których może  być wykonana więcej niż jedna operacja. Strumienie dzielimy na pośrednie, które zwracają sam strumień, kończące, które zwracają wynik danej operacji.

Mechanizm nashorn

Nashorn to mechanizm, który umożliwia współpracę języka JavaScript oraz języka Java. Kod źródłowy napisany w języku JavaScript kompilowany jest do kodu bajtowego/pośredniego, który następnie uruchamiany jest z poziomu maszyny wirtualnej Javy. W wersji Javy 6 wprowadzono mechanizm Rhino, który jest jednak dość starym projektem bo wprowadzonym na zasadach wolnego oprogramowania w 1996 roku. Zamiast przepisywać przestarzałe oprogramowanie, twórcy języka Java postanowili zaprojektować od nowa bardziej wydajną implementację języka JavaScript całkowicie w Javie.

Zmiany w adnotacjach

Dokument JSR 308 (https://types.cs.washington.edu/jsr308/) opisuje nowy typ adnotacji. Specyfikacja pozwala wykorzystać adnotacje nie tylko do dekorowania metod, pól, bądź konstruktorów czy klas, ale także umożliwia dekorowanie dowolnego użytego w kodzie typu.

Profile kompaktowe

Zestaw profili kompaktowych to kolekcja pakietów, która umożliwia wykorzystanie podzbioru maszyny wirtualnej. Takie rozwiązanie pozwala na uruchomienie aplikacji na urządzeniach o ograniczonej pamięci. Java w wersji 8 oferuje trzy profile kompaktowe – compact1, compact2 oraz compact3. Każdy kolejny profil to nadzbiór poprzedniego.  Kompilator javac w nowej wersji Javy posiada dodatkową opcję -profile, która pozwala na kompilację z użyciem danego profilu.


Leave a comment

Your email address will not be published.


*