我在Java 8中玩lambdas,我遇到了警告local variables referenced from a lambda expression must be final or effectively final.我知道当我在匿名类中使用变量时,它们必须在外部类中是最终的,但仍然 - 最终和有效最终之间有什么区别?
我有以下代码,它有点抽象我在Java程序中的实际实现:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bufferedReader.readLine()) != null) {
String lineReference = line;
runLater(() -> consumeString(lineReference));
}
Run Code Online (Sandbox Code Playgroud)
这里我需要使用lambda表达式的引用副本,当我尝试使用时line我得到:
从lambda表达式引用的局部变量必须是最终的或有效的final
对我来说这似乎很尴尬,因为我所做的就是获取对象的新引用,这是编译器也可以自己解决的问题.
所以,我要说line是有效决赛在这里,因为它只是变得回路中的分配和其他地方.
任何人都可以对此有所了解并解释为什么这里需要它以及为什么编译无法解决它?