当前位置: 代码迷 >> 综合 >> java8 新特性之Optional类的避免空指针异常的简单使用
  详细解决方案

java8 新特性之Optional类的避免空指针异常的简单使用

热度:61   发布时间:2023-11-23 16:03:30.0

简介 

/*可能包含或不包含非空值的容器对象。 如果一个值存在, isPresent()将返回true和get()将返回值。
提供依赖于存在或不存在包含值的其他方法,例如orElse() (如果值不存在则返回默认值)和ifPresent() (如果值存在则执行代码块)。这是一个value-based课; 使用身份敏感的操作(包括引用相等(的==上的实例),标识哈希码,或同步) Optional可具有不可预测的结果,应当避免。从以下版本开始:
1.8* */
//orElse(T other)
//返回值如果存在,否则返回 other 。
//ofNullable(T value)
//返回一个 Optional指定值的Optional,如果非空,则返回一个空的 Optional
//of(T value)
//返回具有 Optional的当前非空值的Optional。

测试用的两个类 

class Girl{private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public Girl(String name) {this.name = name;}public Girl() {}
}

 

class Boy{private String name;private Girl girl;public Boy(String name, Girl girl) {this.name = name;this.girl = girl;}public Boy(Girl girl) {this.girl = girl;}public Boy() {}public Girl getGirl() {Optional<Girl> optional=Optional.ofNullable(girl);//将可能为空的参数传入Girl girl1 = optional.orElse(new Girl("李清照"));return girl1;}public String getName() {return name;}public String getGirlName(){//要考虑girl为空的情况Optional<Girl> optional=Optional.ofNullable(girl);//将可能为空的参数传入Girl girl1 = optional.orElse(new Girl("李清照"));return girl1.getName();}
}
class Optional_use {public static void main(String[] args) {//girl为空的情况System.out.println(new Boy().getGirl().getName());//girl不为空System.out.println(new Boy(new Girl("王冰冰")).getGirlName());}
}

运行结果 

可以看到,当Boy中的Girl属性为空时,返回的是备用的李清照,而我们构造方法传入王冰冰,则这时候不为空,返回的就是王冰冰 

  相关解决方案