当前位置: 首页 > 面试题库 >

Javalambda表达式中使用的变量应该是final或有效的final

海岳
2023-03-14
问题内容

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();是否正在运行?