1.はじめに

このチュートリアルでは、

Optional

i

__s

__が空のときにカスタム例外をスローする方法を説明します。

あなたが____Optionalにもっと深く入りたいならば、ここで私達の完全なhttps://www.baeldung.com/java-optional[guide]を見てください。

2.

Optional.orElseThrow

簡単に言うと、値が存在する場合、

isPresent()は

true

を返し、


get()を呼び出すとこの値が返されます。それ以外の場合は、

NoSuchElementException__がスローされます。

カスタムのExceptionインスタンスを提供できるようにするメソッド


またはElseThrow(Supplier <?extends X> exceptionSupplier)


もあります。このメソッドは、存在する場合にのみ値を返します。それ以外の場合は、提供されたサプライヤによって作成された例外がスローされます。

3.行動中

NULL可能な結果を​​返すメソッドがあると想像してみてください。

public String findNameById(String id) {
    return id == null ? null : "example-name";
}

ここで、

findNameById(String id)

メソッドを2回呼び出し、

ofNullable(T value)

メソッドを使用して結果を

Optional

でラップします。



  • Optional

    は、新しいインスタンスを作成するための静的ファクトリメソッドを提供します

    **

    __。このメソッドは

    ofNullable(T value)

    と呼ばれます。それから

    orElseThrowを呼びます。

このテストを実行して動作を確認できます。

@Test
public void whenIdIsNull__thenExceptionIsThrown() {
    assertThrows(InvalidArgumentException.class, () -> Optional
      .ofNullable(personRepository.findNameById(null))
      .orElseThrow(InvalidArgumentException::new));
}

私たちの実装によると、

__findNameByIdは

null

を返します。そのため、新しい


InvalidArgumentException


は、


orElseThrow

__メソッドからスローされます。

このメソッドはnull以外の引数で呼び出すことができます。その後、__InvalidArgumentExceptionが発生することはありません。

@Test
public void whenIdIsNonNull__thenNoExceptionIsThrown() {
    assertAll(() -> Optional
      .ofNullable(personRepository.findNameById("id"))
      .orElseThrow(RuntimeException::new));
}

4.まとめ____

このクイック記事では、Java 8

Optionalから例外をスローする方法について説明しました。

いつものように、私たちはソースコードhttps://github.com/eugenp/tutorials/tree/master/core-java[私たちのGitHubに]を入れました。