1. 序章

このチュートリアルでは、オプション i sが空の場合にカスタム例外をスローする方法を示します。

オプションについて詳しく知りたい場合は、こちらのガイド全体をご覧ください。

2. Optional.orElseThrow

簡単に言えば、値が存在する場合、 isPresent() true を返し、 get()を呼び出すとこの値が返されます。 それ以外の場合は、NoSuchElementExceptionをスローします。

方法もあります orElseThrow(Supplier <? Xを拡張>exceptionSupplier) これにより、カスタムExceptionインスタンスを提供できます。 このメソッドは、存在する場合にのみ値を返します。 それ以外の場合は、提供されたサプライヤによって作成された例外がスローされます。

3. 動作中

null許容の結果を返すメソッドがあると想像してください:

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

次に、 findNameById(String id)メソッドを2回呼び出し、 ofNullable(T value)メソッドを使用して結果をOptionalでラップします。

オプションは、新しいインスタンスを作成するための静的ファクトリメソッドを提供します 。 このメソッドは呼び出されます ofNullable(T値) 。 次に、またはElseThrowを呼び出すことができます。

このテストを実行することで、動作を確認できます。

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

私たちの実装によると、findNameByIdnullを返します。 したがって、新しいInvalidArgumentExceptionまたはElseThrowメソッドからスローされます。

null以外の引数を使用してこのメソッドを呼び出すことができます。 そうすると、 InvalidArgumentException:は発生しません。

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

4. 結論

このクイック記事では、Java8から例外をスローする方法について説明しました。 オプション。 

いつものように、ソースコードをGitHubに配置します。