【发布时间】:2017-04-21 15:01:44
【问题描述】:
我有以下代码片段:
SomeClass someClass;
switch (type) {
case FIRST:
someClass = new SomeClass();
break;
case SECOND:
OptionalLong optional = findSomeOptional();
optional.ifPresent(value -> someClass = new SomeClass(value));
}
我正在尝试将新对象分配给 lambda 表达式中的 someClass 引用,但随后我收到错误消息:“lambda 中使用的变量应该是有效的 final”.
当我将 final 添加到 someClass 的声明中时,我收到另一个错误 “无法为最终变量赋值”
那么我该如何巧妙地处理 lamdas 中的这种分配?
【问题讨论】:
-
为什么要使用 lambda?为什么不只是
someClass = optional.isPresent() ? new SomeClass(value) : null;? -
没有具体内容。当我对 Optional 值进行操作时,这对我来说似乎是一种使用 ifPresent 和 lambda 的优雅方式..
-
并非如此,当您想修改局部变量时。这不是 lambdas 支持的东西。当某个功能不适合时,我会使用其他功能。
-
谢谢,对我来说是一个很好的教训 - 不要试图在所有可能的地方使用 lamdas。
标签: java lambda java-8 variable-assignment final