Java 8增加了很多新的工具类,这里要介绍的就是在开发中非常有用的一个jdk8新增的工具类,java.util.Optional;Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。总而言之,Optional 类的引入很好的解决空指针异常,给无数开发者带来便利。
我们先看看下面的例子:
传统的写法: 如果Person对象p为null,那么一个null值调用方法必定会抛出一个空指针异常,也就是p.getName()会抛出空指针异常,同理如果name字符串为空的话,那么name.toUpperCase()同样会抛出空指针异常,所以我们必须在使用他们之前增加if语句进行空值判断,避免空指针异常,这样一来,我们会发现,由于很多if语句的判断,代码看起来非常冗余,并且可读性极差。
public class Main{
public static void main(String[] args) {
Person p=null;
if(p!=null){
String name = p.getName();
if(name!=null){
String s = name.toUpperCase();
System.out.println(s);
}
}
}
}
class Person{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
引入jdk8的Optional类的写法:
public static void main(String[] args) {
String s="ABC";
Optional<String> optional = Optional.ofNullable(s);
Optional<String> optional2 = optional.map((value)->value.toLowerCase());
System.out.println(optional2.get());//abc
}
即使传入的字符串是s是null,也不会报空指针异常
public static void main(String[] args) {
String s=null;
Optional<String> optional = Optional.ofNullable(s);
Optional<String> optional2 = optional.map((value)->value.toLowerCase());
System.out.println(optional2.orElse("字符串为null"));//字符串为null
}
对于Optional类常用的方法,可以参考该文档:https://www.runoob.com/java/java8-optional-class.html
关于jdk1.8的其它新特性:
- jdk1.8新特性——Lambda表达式与函数式接口:https://blog.csdn.net/can_chen/article/details/106886385
- jdk1.8新特性——Stream流式编程:https://blog.csdn.net/can_chen/article/details/106886484
- jdk1.8新特性——方法引用:https://blog.csdn.net/can_chen/article/details/106886536