Optional
获取对象
- Optional概述
可能包含或不包含非null值的容器对象 方法介绍
| 方法名 | 说明 | | —- | —- | | static Optional of(T value) | 获取一个Optional对象,封装的是非null值的对象 | | static Optional ofNullable(T value) | 获取一个Optional对象,Optional封装的值对象可以是null也可以不是null |示例代码
public class OptionalDemo1 {
public static void main(String[] args) {
//method1();
//public static <T> Optional<T> ofNullable(T value)
//获取一个Optional对象,Optional封装的值对象可以是null也可以不是null
//Student s = new Student("zhangsan",23);
Student s = null;
//ofNullable方法,封装的对象可以是null,也可以不是null。
Optional<Student> optional = Optional.ofNullable(s);
System.out.println(optional);
}
private static void method1() {
//static <T> Optional<T> of(T value) 获取一个Optional对象,封装的是非null值的对象
//Student s = new Student("zhangsan",23);
Student s = null;
//Optional可以看做是一个容器,里面装了一个引用数据类型的对象。
//返回值就是Optional的对象
//如果使用of方法,封装的对象如果为空,那么还是会抛出空指针异常
Optional<Student> optional1 = Optional.of(s);
System.out.println(optional1);
}
}
常用方法
方法介绍
| 方法名 | 说明 | | —- | —- | | T get() | 如果存在值,返回值,否则抛出NoSuchElementException | | boolean isPresent() | 如果存在值,则返回true,否则为false |示例代码
public class OptionalDemo2 { public static void main(String[] args) { //get() 如果存在值,返回值,否则抛出NoSuchElementException //public boolean isPresent() 判断Optional所封装的对象是否不为空,如果不为空返回true , 否则返回false //Student s = new Student("zhangsan",23); Student s = null; Optional<Student> optional = Optional.ofNullable(s); //如果封装的是一个null,那么通过get方法再次获取会抛出NoSuchElementException。 if(optional.isPresent()){ Student student = optional.get(); System.out.println(student); }else{ System.out.println("Optional封装的对象为空"); } } }
处理空指针的方法
方法介绍
| 方法名 | 说明 | | —- | —- | | T orElse(T other) | 如果不为空,则返回具体的值,否则返回参数中的值 | | T orElseGet(Supplier<? extends T> supplier) | 如果不为空,则返回具体的值,否则返回由括号中函数产生的结果 | | void ifPresent (Consumer<? super T> action) | 如果不为空,则使用该值执行给定的操作,否则不执行任何操作 | | void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) | 如果不为空,则使用该值执行给定的操作,否则执行给定的基于空的操作 |示例代码
public class OptionalDemo3 { public static void main(String[] args) { //method1(); //method2(); //method3(); //method4(); } private static void method4() { //Student s = new Student("zhangsan",23); Student s = null; Optional<Student> optional = Optional.ofNullable(s); //public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)、 //如果不为空,则使用该值执行给定的操作,否则执行给定的基于空的操作。 optional.ifPresentOrElse(student -> System.out.println(student), ()->System.out.println("为空了")); } private static void method3() { //Student s = new Student("zhangsan",23); Student s = null; Optional<Student> optional = Optional.ofNullable(s); //ifPresent (Consumer<? super T> action) //如果不为空,则使用该值执行给定的操作,否则不执行任何操作 optional.ifPresent(student -> System.out.println(student)); } private static void method2() { Student s = new Student("zhangsan",23); //Student s = null; Optional<Student> optional = Optional.ofNullable(s); //orElseGet(Supplier<? extends T> supplier) //如果不为空,则返回具体的值,否则返回由括号中函数产生的结果 Student student = optional.orElseGet(()-> new Student("lisi" , 24)); System.out.println(student); } private static void method1() { //Student s = new Student("zhangsan",23); Student s = null; Optional<Student> optional = Optional.ofNullable(s); //orElse(T other) 如果不为空,则返回具体的值,否则返回参数中的值 Student student = optional.orElse(new Student("lisi", 24)); System.out.println(student); } }