简介
/*可能包含或不包含非空值的容器对象。 如果一个值存在, 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属性为空时,返回的是备用的李清照,而我们构造方法传入王冰冰,则这时候不为空,返回的就是王冰冰