1 导读NullPointerException在开发过程中经常遇到 , 稍有不慎小BUG就出现了 , 如果避免这个问题呢 , Optional就是专门解决这个问题的类 , 那么Optional如何使用呢?让我们一起探索一下吧!
2 源码解析2.1 Optional定义Optional类是Java8为了解决null值判断问题而创建的容器类 , 在java.util 下,使用Optional类可以避免显式的null值判断 , 避免null导致的NullPointerException 。首先 , Optional是一个容器 , 它可以保存类型T的值 , 也可以为null的容器对象 。Optional容器只能存一个值 。
2.2 Optional的属性1)源码:
/**
* Common instance for {@code empty()}.
*/
private static final Optional<?> EMPTY = new Optional<>();
/**
* If non-null, the value; if null, indicates no value is present
*/
private final T value;
2.3 Optional的方法Optional除toString()、hashCode() 、equals()等Object的方法外 , 还包含以下方法 。
2.3.1 私有构造方法
/**
* Constructs an empty instance.
*
* @implNote Generally only one empty instance, {@link Optional#EMPTY},
* should exist per VM.
*/
private Optional() {
this.value = https://www.huyubaike.com/biancheng/null;
}
/**
* Constructs an instance with the value present.
*
* @param value the non-null value to be present
* @throws NullPointerException if value is null
*/
private Optional(T value) {
this.value = https://www.huyubaike.com/biancheng/Objects.requireNonNull(value);
}
2.3.2 创建方法1)源码
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) {
return value =https://www.huyubaike.com/biancheng/= null ? empty() : of(value);
}
- empty(): 创建一个空的 Optional 实例
- of(T t) : 创建一个 Optional 实例 , 当 t为null时抛出异常
- ofNullable(T t): 创建一个 Optional 实例 , 但当 t为null时不会抛出异常 , 而是返回一个空的实例
public static void main(String[] args) {
Integer value1 = null;
Integer value2 = 1;
try {
Optional<Integer> optional1 = Optional.empty();
System.out.println("optional1创建了");
}catch (Exception e){
System.out.println("optional1失败了");
}
try {
Optional<Integer> optional2 = Optional.of(value1);
System.out.println("optional2创建了");
}catch (Exception e){
经验总结扩展阅读
- Go 源码解读|如何用好 errors 库的 errors.Is 与 errors.As() 方法
- Optional 常用方法总结
- 走到尽头结局解析?
- 西西里的美丽传说解析?
- LOL血港开膛手派克技能解析及玩法技巧?
- 王者荣耀孙策技能解析?
- 英魂之刃李探花出装打法解析?
- 王者荣耀中钟馗技能解析以及如何连招?
- 英雄联盟lol青钢影卡蜜尔技能玩法解析?
- 野荷塘网站源码,野荷塘网站模板哪里可以买到?