English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массивы

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Списки (List)

Java Очередь (Queue)

Java Карты (Map)

Java Множества (Set)

Java Вход/вывод (I/O)

Java Reader/Writer

Другие темы Java

Класс Optional Java 8

Java 8 новые возможности

Класс Optional - это контейнер对象, который может быть равен null. Если значение существует, метод isPresent() возвращает true, а метод get() возвращает объект.

Optional — это контейнер: он может сохранять значение типа T или просто сохранять null. Optional предоставляет множество полезных методов, чтобы мы не могли явно выполнять проверку на наличие null.

Введение класса Optional эффективно решает проблему исключения NullPointer.

Заявление класса

Ниже приведен пример java.util.Optional<T> Заявление класса:

public final class Optional<T>
extends Object

Классовый метод

НомерМетод & Описание
1static <T> Optional<T> empty()

Возвращает пример пустого Optional.

2boolean equals(Object obj)

Определяет, равен ли Optional другому объекту.

3Optional<T> filter(Predicate<? super <T> predicate)

Если значение существует и это значение соответствует заданному predicate, возвращает Optional, описывающий это значение, в противном случае возвращает пустой Optional.

4<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)

Если значение существует, возвращает Optional, содержащий значение, полученное из функции-маппера, в противном случае возвращает пустой Optional

5T get()

Если это значение содержится в этом Optional, возвращает значение, в противном случае выбрасывает исключение: NoSuchElementException

6int hashCode()

Возвращает хэш-код существующего значения, если значение не существует, возвращает 0.

7void ifPresent(Consumer<? super T> consumer)

Если значение существует, используется это значение для вызова consumer, в противном случае не делается ничего.

8boolean isPresent()

Если значение существует, метод возвращает true, в противном случае возвращает false.

9<U>Optional<U> map(Function<? super T,? extends U> mapper)

Если есть значение, выполняется вызов функции-маппера, которая возвращает значение. Если возвращаемое значение не равно null, создается Optional с возвращаемым значением маппера и возвращает его в качестве значения метода map, в противном случае возвращает пустой Optional.

10static <T> Optional<T> of(T value)

Возвращает Optional с указанным non-null значением.

11static <T> Optional<T> ofNullable(T value)

Если не пусто, возвращает значение, описанное Optional,否则 возвращает пустой Optional

12T orElse(T other)

Если значение существует, возвращает значение,否则 возвращает other

13T orElseGet(Supplier<? extends T> other)

Если значение существует, возвращает значение,否则 вызывает other и возвращает результат вызова other

14<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

Если значение существует, возвращает содержащее значение,否则 выбрасывает исключение, наследованное от Supplier

15String toString()

Возвращает не空的 Optional строки для отладки

Примечание: Эти методы взяты из java.lang.Object унаследованные из класса.

Пример Optional

Мы можем лучше понять использование класса Optional с помощью следующего примера:

import java.util.Optional;
 
public class Java8Tester {
   public static void main(String args[]){
   
      Java8Tester java8Tester = new Java8Tester();
      Integer value1 = null;
      Integer value2 = new Integer(10);
        
      // Optional.ofNullable - позволяет передавать параметр null
      Optional<Integer> a = Optional.ofNullable(value1);
        
      // Optional.of - если переданный параметр null, выбрасывается исключение NullPointerException
      Optional<Integer> b = Optional.of(value2);
      System.out.println(java8Tester.sum(a, b));
   }
    
   public Integer sum(Optional<Integer> a, Optional<Integer> b){
    
      // Optional.isPresent -�断是否存在值
        
      System.out.println(" Worth of the first parameter exists: " + a.isPresent());
      System.out.println(" Worth of the second parameter exists: " + b.isPresent());
        
      // Optional.orElse - если значение существует, верните его, в противном случае верните значение по умолчанию
      Integer value1 = a.orElse(new Integer(0));
        
      // Optional.get - получить значение, значение должно существовать
      Integer value2 = b.get();
      return value1 + value2;
   }
}

Выполните приведенный выше скрипт, и результат будет следующим:

$ javac Java8Tester.java 
$ java Java8Tester
Worth of the first parameter exists: false
Worth of the second parameter exists: true
10

Java 8 новые возможности