前面的两篇文章已经了解了Optional,如何使用Optional避免空指针,Optional的真正作用,我们本章看看Optional如何定义。
先看demo代码:
@Data
public class OptPerson {
private String name;
private Optional<OptCar> optCar;
}
@Data
public class OptCar {
private String carName;
private OptCarBrand optCarBrand;
}
1、创建一个空的Optional
Optional<OptCar> optCar = Optional.empty();
这其实就声明了一个空的Optional,看源码:
private static final Optional<?> EMPTY = new Optional<>();
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
2、创建一个值非空的Optional
Optional<OptCar> optCar2 = Optional.of(new OptCar());
看源码:
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
3、创建一个值可为空的Optional
Optional<OptCar> optCar3 = Optional.ofNullable(new OptCar());
这里如果值为空,那么程序自动赋值一个empty,看源码:
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}