当我像下面这样使用可选的 java 类时
Integer total = null;
Optional<Integer> b = Optional.of(new Integer(10));
b.ifPresent(b -> total =b);
上面的代码不起作用(错误:java:从 lambda 表达式引用的局部变量必须是最终的或实际上是最终的)但是,当我使用 AtomicInteger 时,它会起作用。为什么会这样?
Optional<Integer> b = Optional.of(new Integer(10));
AtomicInteger total = new AtomicInteger();
b.ifPresent(b -> total.set(b));
最佳答案
你可以这样做:
Integer total = Optional.of(new Integer(10)).orElse(null);
如果 Optional
值可以为 null,则:
Integer total = Optional.ofNullable(new Integer(10)).orElse(null);
Optional.ofNullable
将在 null
值的情况下防止 NPE。
在第一个示例中出现此错误的原因是在 lambda 表达式中,您不允许更改局部变量的引用。这就是为什么它们需要被声明为 final
或实际上是 final 的原因。
第二个示例之所以有效,是因为在这里您没有更改 total
变量的引用。您仅使用其 set()
方法更新其值。
关于java - java中Integer、AtomicInteger的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58586385/