0
点赞
收藏
分享

微信扫一扫

Jdk8新特性(四):新增Optional类


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
}

}


举报

相关推荐

0 条评论