在Java8中,尽管使用了可选选项,仍然会得到空指针
我试图进入Java8的功能方面,但在让可选类组件正常工作时遇到了困难在Java8中,尽管使用了可选选项,仍然会得到空指针,java,functional-programming,optional,Java,Functional Programming,Optional,我试图进入Java8的功能方面,但在让可选类组件正常工作时遇到了困难 在下面的代码中,我有意调用数组边界之外的组件,以查看是否可以使用Optional来避免出现异常 public class Driver { public static void main(String[] args) { BiFunction<Integer, Integer, String> add = (a, b) -> { Integer operation = a
在下面的代码中,我有意调用数组边界之外的组件,以查看是否可以使用Optional来避免出现异常
public class Driver {
public static void main(String[] args)
{
BiFunction<Integer, Integer, String> add = (a, b) ->
{
Integer operation = a + b;
return "The answer is " + operation.toString();
};
System.out.println(add.apply(5,4));
Integer[] numArray = {1,2,3,4};
Optional<Integer> number = Optional.ofNullable(numArray[8]);
number.ifPresent(num ->
{
num = number.get();
System.out.println(num);
});
Integer hi = numArray[1];
System.out.println(hi);
}
公共类驱动程序{
公共静态void main(字符串[]args)
{
双功能添加=(a,b)->
{
整数运算=a+b;
返回“答案是”+operation.toString();
};
系统输出打印项次(添加应用(5,4));
整数[]numArray={1,2,3,4};
可选数量=可选的可用数量(numArray[8]);
数量。如果存在(数量->
{
num=number.get();
系统输出打印项数(num);
});
整数hi=numArray[1];
系统输出打印项次(hi);
}
当我运行这段代码试图获取numArray[8],使用Option.ofNullable调用,并使用ifPresent时,我仍然得到下面的异常
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:8
我的理解是,如果numArray[8]为空,则不应调用number.get。我是否遗漏了什么?
numArray[8]
不为null。它不存在。计算此表达式正是抛出ArrayIndexOutOfBoundsException的原因,因为顾名思义,您试图访问一个超出边界的索引
可选在这里是完全不相关的。这不是
NullPointerException
,而是ArrayIndexOutOfBoundsException
“有意调用数组边界之外的组件”…可选无法防止该操作产生任何错误。数组索引不会返回可选值:num=number.get();
不是必需的。您已经从num
变量中的number
获得了数字。