lambda表达式中使用的变量应该是final或有效的final
当我尝试使用calTz
它时会显示此错误。
private TimeZone extractCalendarTimeZoneComponent(Calendar cal, TimeZone calTz) {
try {
cal.getComponents().getComponents("VTIMEZONE").forEach(component -> {
VTimeZone v = (VTimeZone) component;
v.getTimeZoneId();
if (calTz == null) {
calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
}
});
} catch (Exception e) {
log.warn("Unable to determine ical timezone", e);
}
return null;
}
final
可变装置,它可以被实例化一次。在Java中,你不能在lambda以及匿名内部类中使用非最终变量。
你可以使用旧的for-each循环来重构代码:
private TimeZone extractCalendarTimeZoneComponent(Calendar cal,TimeZone calTz) {
try {
for(Component component : cal.getComponents().getComponents("VTIMEZONE")) {
VTimeZone v = (VTimeZone) component;
v.getTimeZoneId();
if(calTz==null) {
calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
}
}
} catch (Exception e) {
log.warn("Unable to determine ical timezone", e);
}
return null;
}
即使我对这段代码有些不了解:
a v.getTimeZoneId()
;而不使用其返回值calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue())
;你不会修改原始传递的内容,calTz
并且你不会在此方法中使用它null
,为什么不设置void
为返回类型?lambda表达式中使用的变量应为final或有效final 当我尝试使用时,它显示了这个错误。
这个问题以前在这里问过 我关于为什么在这里回答的问题 但我对这个答案有一些怀疑。提供的答案提到- 为了降低bug的风险,他们决定确保捕获的变量永远不会变异。我对它会导致并发问题的说法感到困惑。 我在Baeldung上读了一篇关于并发问题的文章,但我仍然对它如何导致并发问题感到有点困惑,有人能用一个例子来帮助我吗?提前谢了。
我有一个JavaFX 8程序(用于JavaFXPorts交叉平台),几乎可以做我想做的事情,但又短了一步。该程序读取文本文件,对行进行计数以建立随机范围,从该范围中选取一个随机数,然后读取该行以进行显示。 我对java有点陌生,但似乎我是否使用Lambda在中显示下一个随机行,我的
问题内容: 我有一个JavaFX 8程序(用于跨平台的JavaFXPorts),可以完成我想做的事情,但只差了一步。该程序读取一个文本文件,对行进行计数以建立一个随机范围,从该范围中选择一个随机数,然后读取该行以进行显示。 我对Java有点陌生,但是似乎我是否使用Lambda都不显示下一个随机行,我的行期望一个静态值。 有什么想法可以调整我必须在每次按下屏幕按钮时简单显示var readln2的下
因为这很管用。看起来只有变量名finalResponse在工作。怎么做,为什么?这样做有效吗?
我正在尝试返回对象。 但我得到了 从内部类引用的局部变量必须是最终变量或实际上是最终变量 on < code > stats = statistics如何返回对象,但要确保< code >。close();是否正在运行?