gpt4 book ai didi

java - lambda 表达式中使用的变量应该是最终变量或有效最终变量

转载 作者:行者123 更新时间:2023-12-02 03:30:41 24 4
gpt4 key购买 nike

Variable used in lambda expression should be final or effectively 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;
}

最佳答案

尽管其他答案证明了该要求,但它们没有解释该要求存在的原因。

JLS 在 §15.27.2 中提到了原因:

The restriction to effectively final variables prohibits access to dynamically-changing local variables, whose capture would likely introduce concurrency problems.

为了降低错误风险,他们决定确保捕获的变量永远不会发生突变。

<小时/>

这也适用于匿名内部类

关于java - lambda 表达式中使用的变量应该是最终变量或有效最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56887595/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com