【发布时间】:2014-01-23 03:44:52
【问题描述】:
我正在使用 Java 8 中的 lambda,我遇到了警告 local variables referenced from a lambda expression must be final or effectively final。我知道当我在匿名类中使用变量时,它们在外部类中必须是最终的,但是 - final 和 有效地最终 之间有什么区别?
【问题讨论】:
-
很多答案,但基本上都是“没有区别”。但这是真的吗?不幸的是,我似乎找不到 Java 8 的语言规范。
-
@AleksandrDubinsky docs.oracle.com/javase/specs
-
@AleksandrDubinsky 不是“真的”真实的。我发现这条规则有一个例外。用常量初始化的局部变量不是编译器的常量表达式。在明确添加 final 关键字之前,您不能将此类变量用于 switch/case 中的 case。例如。 "int k = 1; switch(someInt) { case k: ...".
标签: java lambda inner-classes final java-8