lambda 表达式中使用的变量应该是最终的或有效的最终的
当我尝试使用calTz它时显示此错误。
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 以及匿名内部类中重新分配非最终局部变量。
final
您可以使用旧的 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; }
即使我不明白这段代码的某些部分:
v.getTimeZoneId();
calTz = TimeZone.getTimeZone(v.getTimeZoneId().getValue());
null
void
希望这些技巧也能帮助你提高。