Optional是一个没有子类的工具类,Optional是一个可以为null的容器对象,它的主要作用就是为了避免Null检查,防止NullpointerException
Optional的基本使用
Optional对象的创建方式
// 第一种方式 通过of方法 of方法是不支持null的
Optional<String> op1 = Optional.of("zhangsan");
//Optional<Object> op2 = Optional.of(null);
// 第二种方式 通过ofNullable方法 支持null
Optional<String> op3 = Optional.ofNullable("lisi");
Optional<Object> op4 = Optional.ofNullable(null);
// 第三种方式 通过empty方法直接创建一个空的Optional对象
Optional<Object> op5 = Optional.empty();
Optional中的常用方法介绍
get(): 如果Optional有值则返回,否则抛出NoSuchElementException异常 //get()通常和isPresent方法一块使用
isPresent():判断是否包含值,包含值返回true,不包含值返回false
orElse(T t):如果调用对象包含值,就返回该值,否则返回t
orElseGet(Supplier s):如果调用对象包含值,就返回该值,否则返回 Lambda表达式的返回值
接下来我们测试一下:
public void test(){
Optional<String> op1 = Optional.of("zhangsan");
Optional<String> op2 = Optional.empty();
// 获取Optional中的值
if(op1.isPresent()){
String s1 = op1.get();
System.out.println("用户名称:" +s1);//用户名称:zhangsan
}
if(op2.isPresent()){
System.out.println(op2.get());
}else{
System.out.println("op2是一个空Optional对象");//op2是一个空Optional对象
}
String s3 = op1.orElse("李四");
System.out.println(s3);//zhangsan
String s4 = op2.orElse("王五");
System.out.println(s4);//王五
String s5 = op2.orElseGet(()->{
return "Hello";
});
System.out.println(s5);//王五
}
输出结果:
用户名称:zhangsan
op2是一个空Optional对象
zhangsan
王五
Hello