Witam. Ostatnio chciałem trochę lepiej poznać Javę 8 i zastosowania nowych funkcji języka. Chciałbym się jednak upewnić od bardziej doświadczonych osób czy wszystko dobrze zrozumiałem i nie przegapiłem czegoś ważnego jeśli chodzi o zastosowania.
-
Metody domyślne. Pozwalają definiować domyślne metody w interfejsach, ale tworzenie tego typu metod jest raczej nie zalecane. Zorientowałem się, że głównym powodem wprowadzenia metod domyślnych w interfejsach, było ułatwienie wprowadzenie zmian w API. Zawsze dodanie nowej metody do interfejsu wymuszało zdefiniowanie jej w klasach implementujących co było czasochłonne. Przykładem jest metoda forEach w interfejsie Iterable. Dodana po to abyśmy mogli korzystać z interfejsów funkcjonalnych i wyrażeń lambda podczas iteracji. Czy są jakieś inne tego typu przykłady w API Javy?
-
Metody lambda. Stworzone w celu skrócenia zapisu metod anonimowych. Używane tylko wraz z interfejsami funkcjonalnymi.
-
Referencje do metod. Uproszczenie podczas przekazywania jako argumentów metod interfejsów funkcjonalnych. Nie musimy pisać całego wyrażenia lambda, tylko wystarczy przekazać samą metodę. Przykład:
SuperClass superClass= (item) -> Integer.valueOf(item);
Możemy to skrócić:
SuperClass superClass= Integer::valueOf;
- Optionale. Pozwalają uniknąć wyjątku NPE. Informują, że zmienna może przyjąć wartość null, przez co wiemy, że powinniśmy obsłużyć przypadek z nullem. Pozwalają na wyeliminowanie łańcuchów sprawdzania nulli, przykładowo:
if (outer != null && outer.nested != null && outer.nested.inner != null)
z optionalem:
Optional.of(new Outer())
.map(Outer::getNested)
.map(Nested::getInner)
.map(Inner::getFoo)
.ifPresent(System.out::println);