オプションまたはElseオプション
1. 前書き
別のインスタンスが空の場合は、別のOptionalインスタンスにフォールバックしたい場合があります。
このチュートリアルでは、それをどのように行うことができるかについて簡単に説明します。これは見た目よりも難しいことです。
Javaオプションクラスの概要については、previous articleをご覧ください。
2. プレーンJavaの使用
Java 8では、最初のOptionalが空の場合に、異なるOptionalを返す直接的な方法はありません。
したがって、独自のカスタムメソッドを実装できます。
public static Optional or(Optional optional, Optional fallback) {
return optional.isPresent() ? optional : fallback;
}
そして、実際には:
@Test
public void givenOptional_whenValue_thenOptionalGeneralMethod() {
String name = "Filan Fisteku";
String missingOptional = "Name not provided";
Optional optionalString = Optional.ofNullable(name);
Optional fallbackOptionalString = Optional.ofNullable(missingOptional);
assertEquals(
optionalString,
Optionals.or(optionalString, fallbackOptionalString));
}
@Test
public void givenEmptyOptional_whenValue_thenOptionalGeneralMethod() {
Optional optionalString = Optional.empty();
Optional fallbackOptionalString = Optional.ofNullable("Name not provided");
assertEquals(
fallbackOptionalString,
Optionals.or(optionalString, fallbackOptionalString));
}
一方、Java 9 does add an or() method that we can use to get an Optional, or another value, if that Optional isn’t present。
簡単な例でこれを実際に見てみましょう。
public static Optional getName(Optional name) {
return name.or(() -> getCustomMessage());
}
この例では、補助的な方法を使用して支援しました。
private static Optional getCustomMessage() {
return Optional.of("Name not provided");
}
テストして、どのように機能するかをさらに理解することができます。 次のテストケースは、Optional が値を共有する場合のデモンストレーションです。
@Test
public void givenOptional_whenValue_thenOptional() {
String name = "Filan Fisteku";
Optional optionalString = Optional.ofNullable(name);
assertEquals(optionalString, Optionals.getName(optionalString));
}
3. グアバの使用
これを行う別の方法は、グアバのOptional classのor() methodを使用することです。 まず、プロジェクトにguava を追加する必要があります(最新バージョンはhereにあります)。
com.google.guava
guava
24.1.1-jre
これで、以前と同じ例を続けることができます。
public static com.google.common.base.Optional getOptionalGuavaName(com.google.common.base.Optional name) {
return name.or(getCustomMessageGuava());
}
private static com.google.common.base.Optional getCustomMessageGuava() {
return com.google.common.base.Optional.of("Name not provided");
}
ご覧のとおり、上に表示されているものと非常によく似ています。 ただし、メソッドの名前にはわずかな違いがあり、JDK 9のクラスOptionalのor() メソッドとまったく同じです。
これで、上記の例と同様にテストできます。
@Test
public void givenGuavaOptional_whenInvoke_thenOptional() {
String name = "Filan Fisteku";
Optional stringOptional = Optional.of(name);
assertEquals(name, Optionals.getOptionalGuavaName(stringOptional));
}
@Test
public void givenGuavaOptional_whenNull_thenDefaultText() {
assertEquals(
com.google.common.base.Optional.of("Name not provided"),
Optionals.getOptionalGuavaName(com.google.common.base.Optional.fromNullable(null)));
}
4. 結論
これは、Optional orElse Optionalの機能を実現する方法を説明する簡単な記事でした。
ここで説明されているすべての例のコード、およびその他の多くのコードは、over on GitHubにあります。