如何使用 Optional 类避免Java中的 NullPointerException?
为了学习如何避免错误,我们必须首先了解错误。
空指针异常
NullPointerException是一个 RuntimeException。在Java中,可以为对象引用分配一个特殊的 null 值。当程序尝试使用具有 null 值的对象引用时,将引发 NullPointerException。
这些可以是:
- 从空对象调用方法。
- 访问或修改空对象的字段。
- 取null的长度,就好像它是一个数组一样。
- 访问或修改空对象的槽,就像它是一个数组一样。
- 抛出 null,就好像它是一个 Throwable 值。
- 当您尝试通过空对象进行同步时。
例子:
// Java program to show NullPointerException
public class Example {
public static void main(String[] args)
{
// Create a String of size 10
String[] a = new String[10];
// The String is empty
// So a[1] will have null at present
String upcase = a[1].toUpperCase();
System.out.print(upcase);
}
}
输出:
Exception in thread "main" java.lang.NullPointerException
at Example.main(Example.java:4)
如何使用可选类避免 NullPointerException?:
Java 8 在Java.util 包中引入了一个新类 Optional。它可以帮助编写简洁的代码,而无需使用太多的空检查。通过使用 Optional,我们可以指定要返回的替代值或要运行的替代代码。这使得代码更具可读性,因为隐藏的事实现在对开发人员可见。
选修课
Optional 是可以包含非空值或空值的容器对象。它基本上检查内存地址是否有对象。如果存在值,isPresent() 将返回 true,而 get() 将返回该值。提供了依赖于包含值是否存在的其他方法,例如 orElse() 如果值不存在则返回默认值,如果值存在则执行代码块 ifPresent()。这是一个基于值的类,即它们的实例是:
- 最终的和不可变的(尽管可能包含对可变对象的引用)。
- 仅基于 equals() 被视为相等,而不是基于引用相等 (==)。
- 没有可访问的构造函数。
句法:
Optional is a generic type of type T. Optional
使用可选类纠正上述 NullPointerException 的代码:
// Java program to avoid NullPointerException // using Optional Class import java.util.Optional; public class Example { public static void main(String[] args) { // Create a String of size 10 String[] a = new String[10]; // Create an Optional Class instance // and get the state for a[1] element // for Null value Optional
check = Optional.ofNullable(a[1]); // If the value in the current instance is null, // it will return false, else true if (check.isPresent()) { // The String is empty // So a[1] will have null at present String upcase = a[1].toUpperCase(); System.out.print(upcase); } else // As the current value is null System.out.println("String value is not present"); } } 输出:String value is not present
注意:因此这可以理解为 NullPointerException 的异常处理方法
使用 Optional 类处理 NullPointerException:
// Java program to handle NullPointerException // using Optional Class import java.util.Optional; public class Example { public static void main(String[] args) { // Create a String of size 10 String[] a = new String[10]; // Define the a[1] element a[1] = "geeksforgeeks"; // Create an Optional Class instance // and get the state for a[1] element // for Null value Optional
check = Optional.ofNullable(a[1]); // If the value in the current instance is null, // it will return false, else true if (check.isPresent()) { // The String is not empty // So a[1] will have a value at present String upcase = a[1].toUpperCase(); System.out.print(upcase); } else // If the current value is null System.out.println("String value is not present"); } } 输出:GEEKSFORGEEKS