Optionalはnullかnull以外かのどちらの値も格納できるclass
Optional.ofNullable(xxx)はnullならemptyに読み替えて格納する。
array refer時のArrayIndexOutOfBoundsExceptionやNullpointerExceptionを回避してくれるようなものではないので注意
public class Outer {
public static void main(String[] args) {
String strArray[] = {"1a","2a",null};
System.out.println(get(strArray,3));
System.out.println(get(strArray,2));
System.out.println(get(strArray,1));
System.out.println(get(null,1));
}
static <T> Optional<T> get(T[] array, int index) {
if(array == null) {
return Optional.empty();
} else {
try {
return Optional.ofNullable(array[index]);
} catch (ArrayIndexOutOfBoundsException ex) {
return Optional.empty();
}
}
}
}
Optional.empty
Optional.empty
Optional[2a]
Optional.empty
emptyからget()すると、NoSuchElementException
System.out.println(Optional.empty().get());
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:148)
at com.mycompany.mavenproject1.Outer.main(Outer.java:12)
Command execution failed.
isPresent/isEmptyで空か空以外かわかる
public static void main(String[] args) {
Optional<String> op = Optional.of("xxx");
System.out.println(op.isPresent());
System.out.println(op.isEmpty());
op = Optional.empty();
System.out.println(op.isPresent());
System.out.println(op.isEmpty());
}
true
false
false
true