Optional<T>类(java.util.Optional)是一个容器类,它可以保存类型为T的值,代表表这个值的存在。或者仅仅保存为NULL,表示这个值不存在。原来用NULL表示一个值不存在,现在Optional类可以更好的表达这个概念。
- Optional类的JavaDoc描述如下:这是一个可以为NULL的容器对象。如果值存在则isPresent()方法会返回 true ,调用get()方法会返回该对象。
创建Optional类对象的方法:
Optional.of(T t): 创建一个Optional实例,t必须非空
Optional.empty(): 创建一个空的Optional实例
Optional.ofNullable(T t):t可以为空
- 判断Optional容器中是否包含对象:
boolean isPresent(): 判断是否包含对象
void ifPresent(Consumer<?super T>consumer):如果有指就执行consumer接口的实现代码,并且会作为参数传递给他
- 获取Optional容器的对象:
T get(): 如果调用对象包含值,返回该值,否则抛异常
T orElse(T other): 如果有值则将其返回,否则返回指定的 other对象
T orElseGet(Supplier<?extends T>other):如果有值则将其返回,否则返回由接口提供的对象
T orElseThrow(Supplier<?extends X>exceptionSupplier):如果有值则将其返回,否则抛出由接口实现提供异常
public class Test3{
@Test
public void test(){
Girl girl = new Girl();
//of(T t):必须保证t是非空的
Optional<Girl> optionalGirl = Optional.of(girl);
}
@Test
public void test1(){
Girl girl1 = new Girl();
//ofNullable(T t):t可以是非空的
Optional<Girl> optionalGirl1 = Optional.ofNullable(girl1);
System.out.println(optionalGirl1);
}
public String getGirlName(Boy boy){
Optional<Boy> boyOptional = Optional.ofNullable(boy);
//Boy1肯定非空
Boy boy1 = boyOptional.orElse(new Boy(new Girl("赵丽")));
Girl girl = boy1.getGirl();
Optional<Girl> girlOptional = Optional.ofNullable(girl);
//Boy1肯定非空;
Girl girl1 = girlOptional.orElse(new Girl("古力娜扎"));
return girl1.getName() ;
}
@Test
public void test3(){
Boy boy = null;
boy=new Boy();
boy = new Boy(new Girl("dfff"));
String girlName = getGirlName(boy);
System.out.println(girlName);
}
}
class Boy{
private Girl girl;
public Boy(){
}
public Girl getGirl() {
return girl;
}
public void setGirl(Girl girl) {
this.girl = girl;
}
@Override
public String toString() {
return "Boy{" +
"girl=" + girl +
'}';
}
}
class Girl{
private String name;
@Override
public String toString() {
return "Girl{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Girl(){
}
}