English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Optional 클래스는 null이 될 수 있는 컨테이너 객체입니다. 값이 존재하면 isPresent() 메서드가 true를 반환하고, get() 메서드를 호출하면 해당 객체를 반환합니다.
Optional은 컨테이너입니다: T 타입의 값을 저장하거나 단순히 null을 저장할 수 있습니다. Optional은 많은 유용한 메서드를 제공하며, 따라서 우리는 명시적으로 null 값 검사를 수행하지 않아도 됩니다.
Optional 클래스의 도입은 null指针 예외를 잘 해결합니다.
다음은 하나의 java.util.Optional<T> 클래스 선언:
public final class Optional<T> extends Object
순번 | 메서드 & 설명 |
---|---|
1 | static <T> Optional<T> empty() 비어 있는 Optional 예제를 반환합니다. |
2 | boolean equals(Object obj) 다른 객체가 Optional과 같은지�断합니다. |
3 | Optional<T> filter(Predicate<? super <T> predicate) 값이 존재하면, 그 값이 주어진 predicate와 일치하면 해당 값을 설명하는 Optional을 반환하고, 그렇지 않으면 비어 있는 Optional을 반환합니다. |
4 | <U>Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 값이 존재하면, Optional에 포함된 맵 메서드의 값을 기반으로 반환하고, 그렇지 않으면 비어 있는 Optional을 반환합니다. |
5 | T get() 이 Optional에 해당 값을 포함하고 있으면 값을 반환하고, 그렇지 않으면 NoSuchElementException를 던집니다. |
6 | int hashCode() 존재하는 값의 해시 코드를 반환하고, 값이 존재하지 않으면 0을 반환합니다. |
7 | void ifPresent(Consumer<? super T> consumer) 값이 존재하면 해당 값을 사용하여 consumer를 호출하고, 그렇지 않으면 아무런 행동도 하지 않습니다. |
8 | boolean isPresent() 값이 존재하면 메서드가 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
9 | <U>Optional<U> map(Function<? super T,? extends U> mapper) 값이 있으면, 해당 값을 호출映射 함수를 통해 반환 값을 얻습니다. 반환 값이 null이 아니면, 맵 메서드 반환 값으로 맵 반환 값을 포함한 Optional을 생성하고, 그렇지 않으면 비어 있는 Optional을 반환합니다. |
10 | static <T> Optional<T> of(T value) 지정된 비 null 값을 가진 Optional을 반환 |
11 | static <T> Optional<T> ofNullable(T value) 비어 있지 않으면, Optional이 설명하는 지정된 값을 반환하고, 비어 있으면 비어 있는 Optional을 반환 |
12 | T orElse(T other) 이 값이 존재하면, 값을 반환하고, 없으면 other를 반환 |
13 | T orElseGet(Supplier<? extends T> other) 이 값이 존재하면, 값을 반환하고, 없으면 other를 트리거하고, other 호출 결과를 반환 |
14 | <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) 이 값이 존재하면, 포함된 값을 반환하고, 없으면 Supplier에서 상속된 예외를 투척 |
15 | String toString() 디버깅을 위해 비어 있는 Optional 문자열을 반환 |
주의: 이 메서드는 java.lang.Object 을 상속받았습니다.
以下示例可以更好地了解 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("첫 번째 파라미터 값이 존재합니다: " + a.isPresent()); System.out.println("두 번째 파라미터 값이 존재합니다: " + 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 첫 번째 파라미터 값이 존재합니다: false 두 번째 파라미터 값이 존재합니다: true 10