Optional的构造方法
- 源码中Optional构造方法为私有的,所以不能通过new的方式创建
Optional的其他方法
获取Optional对象
- 所以如何获取Optional对象?—>使用of(T value)和ofNullable(T value)方法
of(T value)方法中value是任意类型但是不能为null;
ofNullable(T value)方法value也是任意类型,但是可以为null;
Optional<Object> optional = Optional.ofNullable(null);
Optional<Object> optionala = Optional.ofNullable("");
Optional<Object> optionalb = Optional.ofNullable(1);
Optional<Object> optionalc = Optional.ofNullable(new Date());
Optional<Object> optional1 = Optional.of("");
Optional<Object> optional2 = Optional.of(1);
Optional<Object> optional3 = Optional.of(new Date());
判断值是否存在
- isPresent(),如果值存在返回true,否则返回false;
Optional<Object> optional = Optional.ofNullable(null);
Optional<Object> optionalb = Optional.ofNullable(1);
System.out.println(optional.isPresent());//false
System.out.println(optionalb.isPresent());//true
- ifPresent(Consumer<? super T> consumer),如果Optional对象里面的值不为null,调用Consumer里面的方法;否则不调用;
执行以下代码,控制台会打印–>optionalb 不为null
Optional<Object> optional = Optional.ofNullable(null);
Optional<Object> optionalb = Optional.ofNullable(1);
optional.ifPresent(new Consumer() {
@Override
public void accept(Object o) {
System.out.println("optional 为null");
}
});
optionalb.ifPresent(new Consumer() {
@Override
public void accept(Object o) {
System.out.println("optionalb 不为null");
}
});
empty() 返回一个空的Optional对象
Optional<String> empty = Optional.<String>empty();
Optional<Integer> empty1 = Optional.<Integer>empty();
System.out.println(empty.toString()==empty1.toString());
orElse(value),如果Optional对象里面的值为null,返回value;否则返回Optional里面的值
Optional<Integer> optional = Optional.ofNullable(null);
Optional<Integer> optionalb = Optional.ofNullable(1);
System.out.println(optional.orElse(2)==1);//false
System.out.println(optionalb.orElse(2)==1);//true
orElseGet(Supplier<? extends T> other) 和orElse(value)一样,只是orElseGet的参数是一个对象
Optional<Integer> optional = Optional.ofNullable(null);
Optional<Integer> optionalb = Optional.ofNullable(1);
System.out.println(optional.orElseGet(() -> {
return 2;
})==1);//false
System.out.println(optionalb.orElseGet(() -> {
return 1;
})==1);//true