【发布时间】:2018-11-22 10:51:20
【问题描述】:
功能:
private static void printArray(int[] array, Optional<Integer> startIndex, Optional<Integer> endIndex) {
for(Integer i = a.orElse(new Integer(0)); i<=endIndex.orElse(new Integer(array.length));i++) {
System.out.print(array[i]+" ");
}
}
在传递如下值时:
printArray(arr1, null, null);
NPE 被抛出。为什么Optional.orElse 函数没有创建一个新的 Integer 对象?我检查了 StackOverflow,但找不到来自 orElse 的 NPE 被抛出。我发现这种行为出乎意料。
欢迎所有建议。
【问题讨论】:
-
我不太确定,但我认为使用
Oprional作为方法参数或方法返回是一种不好的做法。 -
我不太明白为什么人们倾向于使用 lambda 表达式,即使是简单的任务。很多时候,它会降低代码的可读性和调试难度,就像这里一样。为什么不定义原始
int而不是可空的Integer? -
@Zorglube 实际上
Optional主要用作方法参数和返回值。如果没有,还有什么地方可以使用它? -
@jediz 你在哪里看到 lambda 表达式?
-
@Zorglube:是的,将 Optionals 作为方法参数传递是丑陋的。 flatMap 使它变得不必要。