在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

我试图进入Java8的功能方面,但在让可选类组件正常工作时遇到了困难


在下面的代码中,我有意调用数组边界之外的组件,以查看是否可以使用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
获得了数字。