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 리더/Writer

Java 기타 주제

Java 8 Optional 클래스

Java 8 새로운 기능

Optional 클래스는 null이 될 수 있는 컨테이너 객체입니다. 값이 존재하면 isPresent() 메서드가 true를 반환하고, get() 메서드를 호출하면 해당 객체를 반환합니다.

Optional은 컨테이너입니다: T 타입의 값을 저장하거나 단순히 null을 저장할 수 있습니다. Optional은 많은 유용한 메서드를 제공하며, 따라서 우리는 명시적으로 null 값 검사를 수행하지 않아도 됩니다.

Optional 클래스의 도입은 null指针 예외를 잘 해결합니다.

클래스 선언

다음은 하나의 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을 생성하고, 그렇지 않으면 비어 있는 Optional을 반환합니다.

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

지정된 비 null 값을 가진 Optional을 반환

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("첫 번째 파라미터 값이 존재합니다: " + 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

Java 8 새로운 기능