0
0

More than 1 year has passed since last update.

Optional class

Last updated at Posted at 2023-01-24

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0