4. 新增Optional类
该类主要为解决空指针异常(NullPointerException)问题。
4.1. 创建Optional对象
of()方法
null 值作为参数传递进去,仍会抛空指针异常。
ofNullable()
如果对象可能是 null,则应该使⽤该方法。
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
Student student = new Student("张三", 28);
student = null;
Optional<Student> opl = Optional.of(student);//空指针异常
Optional<Student> opnl = Optional.ofNullable(student);//不报异常
}
}
注: 如果想不报空指针异常,建议使用ofNullable(),或自定义处理。
4.2. 获取Optional对象值
get()方法
如果 Optional中有值,则返回值,否则抛出 NoSuchElementException。
isPresent()
判断Optional中是否有值,如果值存在,则返回true;否则返回false。
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
Student student = new Student("张三", 28);
student = null;
Optional<Student> opnl = Optional.ofNullable(student);//不报异常
if(opnl.isPresent()) {//若存在值,则返回true
Student stu2 = opnl.get();
System.out.println(stu2.getAge());//28
}
}
}
4.3. 兜底方法
orElse(T other)方法
如果Optional中有值,则返回值,否则返回other。
示例1:
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
Student student1 = null;
Student student2 = new Student("李四", 28);
Student stu = Optional.ofNullable(student1).orElse(student2);//orElse中一定要传递不能为null的值,确保兜底方法可以永远顺利执行,否则后续操作还会报错
System.out.println(stu.getName());
}
}
示例2(接触Lambda表达式):
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
Student student1 = null;
Student student2 = new Student("李四", 28);
Integer age1 = Optional.ofNullable(student1).map(obj->obj.getAge()).orElse(40);
System.out.println(age1);//40
Integer age2 = Optional.ofNullable(student2).map(obj->obj.getAge()).orElse(40);
System.out.println(age2);//28
}
}