Java8新特性之空指针异常的克星Optional类的实现
前言
在 Java 中,我们经常会遇到空指针异常(NullPointerException),尤其是在处理数据集合或者从接口返回数据时,如果拿到了 null 值,程序就会抛出异常。
Java 8 中提供了一个克星空指针异常的类 Optional,它可以有效地解决 null 值的问题。
Optional 类详解
Optional 类是 Java 8 中引入的一个类,目的是用来解决空指针异常的问题。它可以包含一个非空的值,也可以表示不存在值(null)。
构造 Optional 对象
创建空 Optional 对象
如果我们要表示一个 null 值的 Optional 对象,可以使用静态方法 empty() 来创建一个空的 Optional 对象,如下:
Optional<Car> optCar = Optional.empty();
这里的 Car 是一个类名,表示 Optional 中要包含的类型。
创建包含非 null 值的 Optional 对象
如果我们要表示一个非 null 值的 Optional 对象,可以通过它的 of() 方法,将一个非 null 的值打包为 Optional 对象,如下:
Car car = new Car();
Optional<Car> optCar = Optional.of(car);
如果我们试图将一个 null 的值打包为 Optional 对象,会抛出 NullPointerException 异常。
创建允许 null 值的 Optional 对象
如果我们要表示一个允许空值的 Optional 对象,可以通过 ofNullable() 方法,将一个可能为空的值打包为 Optional 对象,如下:
Car car = null;
Optional<Car> optCar = Optional.ofNullable(car);
获取 Optional 对象中的值
获取包含的值
我们可以通过 get() 方法,从 Optional 对象中获取包含的值,如下:
Optional<Car> optCar = Optional.ofNullable(car);
Car car = optCar.get();
如果 Optional 中不包含任何值,那么 get() 方法会抛出 NoSuchElementException 异常。
判断是否包含值
我们可以通过 isPresent() 方法,判断 Optional 对象中是否包含非空的值,如下:
Optional<Car> optCar = Optional.ofNullable(car);
if(optCar.isPresent()) {
Car car = optCar.get();
} else {
// 处理 Optional 中没有值的情况
}
获取包含的值或默认值
我们可以使用 orElse() 方法,如果 Optional 对象中包含值,则返回该值,否则返回一个默认值,如下:
Optional<Car> optCar = Optional.ofNullable(car);
Car car = optCar.orElse(new Car("unknown"));
利用 Optional 类处理空指针异常
我们经常会遇到这样一种情况,在判断某个对象是否为空时,使用 if 判断,然后在 if 代码块中进一步处理,如下:
if(car != null) {
Engineer engineer = car.getEngineer();
if(engineer != null) {
String name = engineer.getName();
if(name != null) {
System.out.println(name.toUpperCase());
}
}
}
这段代码是有问题的,如果任何一个对象为 null 的话,程序就会抛出空指针异常。而利用 Optional 类可以轻松地解决这个问题,示例如下:
Optional.ofNullable(car)
.map(Car::getEngineer)
.map(Engineer::getName)
.ifPresent(name -> System.out.println(name.toUpperCase()));
这段代码中,首先利用 ofNullable() 方法创建一个 Optional 对象,然后使用 map() 方法对该对象进行映射,最后使用 ifPresent() 方法判断 Optional 对象中是否包含值,并在存在值的情况下打印该值。
总结
Optional 类是 Java 8 中克星空指针异常的一种解决方案。它的设计思想是将值包装成 Optional 对象,这样我们就可以使用 Optional 对象的方法来解决 null 值的问题。使用 Optional 类对空指针异常进行处理,能够让我们的代码更加安全、健壮。
示例一:
Person person = null;
Optional.ofNullable(person)
.map(Person::getAddress)
.map(Address::getStreet)
.ifPresent(System.out::println);
// 当 person 为 null 时,不会抛出空指针异常,直接输出 null
示例二:
List<String> list = null;
List<String> result = Optional.ofNullable(list)
.orElse(Collections.emptyList());
// 当 list 为 null 时,返回一个空的列表
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8新特性之空指针异常的克星Optional类的实现 - Python技术站