持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
什么是Optional
每个Java 程序员看到NullPointerException空指针异常都心头一惊,空指针可能会导致代码崩溃。想避免就不得不使用经常使用判断。
为了解决这个问题,Java8引入了一个新类 Optional。Optional可以帮助我们写出更简洁的代码,而无需使用太多的空检查。而且通过使用Optional,我们还可以指定要返回的替代值或要运行的替代代码。这使得我们的代码更具可读性。
下面我们就来学习一下Optional类的基础操作吧
empty()
使用empty()方法可以创建一个空的Optional对象
Optional<String> object = Optional.empty();
try {
// 如果存在则输出值,如果不存在则返回orElse
System.out.println(object.orElse("orElse")); // orElse
// 存在输出Value,不存在则执行Supplier的get()并返回结果。
String res = object.orElseGet(() -> {
return "result";
});
System.out.println(res); // result
//如果不存在会抛出oSuchElementException异常
System.out.println(object.get());
} catch (Exception e) {
System.out.println(e); // java.util.NoSuchElementException: No value present
}
使用orElse()/orElseGet()/get()可以从Optional类的实例中获取值,执行结果如下
orElse
result
java.util.NoSuchElementException: No value present
使用empty()方法可以创建一个空的Optional对象
of(T value)
使用of()方法创建一个含有值的Optional对象
Optional<String> object = Optional.of("HooW");
try {
// 如果存在则输出值,如果不存在则返回orElse
System.out.println(object.orElse("orElse")); // HooW
// 存在值则输出Value,不存在则执行Supplier的get()并返回结果
String res = object.orElseGet(() -> {
return "result";
});
System.out.println(res); // HooW
//如果不存在会抛出oSuchElementException异常
System.out.println(object.get()); //HooW
} catch (Exception e) {
System.out.println(e);
}
执行结果如下
HooW
HooW
HooW
在of()方法中可以创建一个带有值的Optional对象
ofNullable(T value)
使用Optional.ofNullable()方法创建一个对象,该对象是of方法的结果
// 如果值为null,则认为Optional对象为空值
Optional<String> object = Optional.ofNullable(null);
try {
// 为空则返回orElse
System.out.println(object.orElse("orElse")); // orElse
// 如果存在:Value,如果不存在:执行Supplier的get()并返回结果。
var res = object.orElseGet(() -> {
return "result";
});
System.out.println(res); // result
// 获取价值。如果不存在,NoSuchElementException
System.out.println(object.get());
} catch (Exception e) {
System.out.println(e); // java.util.NoSuchElementException: No value present
}
执行结果如下。
orElse
result
java.util.NoSuchElementException: No value present
接下来我们看一下不为null时的情况
Optional<String> object = Optional.ofNullable("HooW");
try {
System.out.println(object.orElse("orElse")); // HooW
var res = object.orElseGet(() -> {
return "result";
});
System.out.println(res); // HooW
System.out.println(object.get()); //HooW
} catch (Exception e) {
System.out.println(e);
}
执行结果如下
HooW
HooW
HooW
所以如果使用ofNullable()方法将Optional的值置为null,则可创建一个为空的Optional对象;
Optional.of()与Optional.ofNullable() 的区别在于of()不允许参数是null,ofNullable()无限制
isPresent()
isPresent()方法可以检查Optional对象的存在
// 创建一个空的可选对象
Optional<String> object1 = Optional.ofNullable(null);
Optional<String> object2 = Optional.ofNullable("HooW");
// 仅在存在时显示
object1.ifPresent(System.out::println);
System.out.println("------------------");
object2.ifPresent(System.out::println); // HooW
执行结果如下。
------------------
HooW