Javalambda表达式中使用的变量应该是final或有效的final
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
为返回类型?希望这些技巧也能帮助你改善。
以上是 Javalambda表达式中使用的变量应该是final或有效的final 的全部内容, 来源链接: utcz.com/qa/435510.html