小编之前开发java的时候,经常遇到空指针问题,做if判断来避免抛出异常。现在有 Optional类,可以不用那么麻烦了。
Optional 类是可以为 null 的容器对象,如果值存在,则 isPresent() 方法返回 true, 调用 get() 方法会返回该对象。Optional 类的引入很好的解决了空指针异常。
下面展示一下具体怎么使用 Optional类:
/**
* @author: 80318030
* @description:
* @date: 2022/3/23
**/
public class OptionalTest {
//定义对象的成员变量
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
//声明对象
OptionalTest optionalTest1 = new OptionalTest();
//声明null
OptionalTest optionalTest2 = null;
//调用对象方法
System.out.println("====optionalTest1 name: " + optionalTest1.getName());
System.out.println("====optionalTest2 name: " + optionalTest2.getName());
}
}
输出: 可以看到,调用 optionalTest2时候,抛出了空指针异常。
"C:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe"
====optionalTest1 name: null
Exception in thread "main" java.lang.NullPointerException
at OptionalTest.main(OptionalTest.java:36)
Process finished with exit code 1
为了避免这种情况,引入Optional类的使用:
public static void main(String[] args) {
OptionalTest optionalTest1 = new OptionalTest();
OptionalTest optionalTest2 = null;
// ofNullable 允许参数为Null
Optional<OptionalTest> test1 = Optional.ofNullable(optionalTest1);
Optional<OptionalTest> test2 = Optional.ofNullable(optionalTest2);
// isPresent 返回对象是否存在
System.out.println("====optionalTest1 是否存在: " + test1.isPresent());
System.out.println("====optionalTest1: " + optionalTest1.getName());
System.out.println("====optionalTest2 是否存在: " + test2.isPresent());
//orElse做判断,如果对象不存在,则返回默认值,即 new OptionalTest(),继续getName
System.out.println("====optionalTest2 orElse: " + test2.orElse(new OptionalTest()).getName());
//对象不存在时候,直接getName。会抛出异常,可见下面的输出
System.out.println("====optionalTest2 get: " + test2.get().getName());
}
输出:
"C:\Program Files (x86)\Java\jdk1.8.0_31\bin\java.exe"
====optionalTest1 是否存在: true
====optionalTest1: null
====optionalTest2 是否存在: false
====optionalTest2 orElse: null
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at OptionalTest.main(OptionalTest.java:33)
Process finished with exit code 1
版权声明:本文为yuanchenglong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。