Functional
Optional: ofNullable はnullをemptyにし、ofは例外にする
nullを受け入れる境界ではofNullableを使い、nullが設計違反ならofで早く失敗させます。
SourceNullableOptionals.java
Java 21
package examples.optional;
import java.util.Optional;
public final class NullableOptionals {
private NullableOptionals() {}
public static Optional<String> fromNullable(String value) {
return Optional.ofNullable(value);
}
public static Optional<String> fromRequired(String value) {
return Optional.of(value);
}
}TestNullableOptionalsTest.java
Java 21
package examples.optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.Optional;
import org.junit.jupiter.api.Test;
class NullableOptionalsTest {
@Test
void ofNullableはnullをemptyのOptionalへ変換する() {
assertEquals(Optional.empty(), NullableOptionals.fromNullable(null));
}
@Test
void ofはnullを受け取るとNullPointerExceptionを送出する() {
assertThrows(NullPointerException.class, () -> NullableOptionals.fromRequired(null));
}
}01Assertion
このテストで確認できること
- ofNullable(null) はOptional.emptyを返す
- of(null) はNullPointerExceptionを送出する
nullが外部入力として正常に来る境界だけでofNullableを使います。内部の不変条件が破れたことを検知したい場合はofを使います。
OBSERVED RESULT
expected: Optional.ofNullable(null) → Optional.empty
actual: Optional.empty
expected exception: NullPointerException