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