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

回到顶部