local variables referenced from a lambda expression must be final or effectively final
local variables referenced from an inner class must be final or effectively final
如果有任何答复,我将不胜感激。
Java8中的编译器是否有效地将final变量解释为final变量,然后在运行时将其用作final变量?
在这两种情况下,答案都是肯定的。
后者的原因是类文件格式没有提供说明局部变量是否声明为final
的方法。因此,如果JIT编译器要基于终结性进行优化,那么终结性必须从方法的字节码实际执行的操作中推断出来;即有效终局性。
因此,我开始使用Java8streams/lambda表达式,遇到了一些有趣的问题,我不知道如何解决这些问题。所以我在这里,请求你的帮助。 现在我得到编译器错误“在lambda表达式中使用的变量应该有效地是final”。 怎么做? 方法createNewDocument和createOldDocument引发异常,因此调用必须在try/catch块内。我还需要关闭finally块内的文档。
IE 可能会失败。 C11附件J.2内容如下
lambda表达式中使用的变量应为final或有效final 当我尝试使用时,它显示了这个错误。
问题内容: 我对JVM有一个非常基本的问题:它是编译器还是解释器? 如果它是解释器,那么JVM内部存在的JIT编译器怎么办? 如果两者都不是,那么JVM到底是什么?(我不希望将字节码转换为机器特定的代码等jVM的基本定义。) 问题答案: 首先,让我们对以下术语有一个清晰的认识 是Java编译器-将Java代码编译为 Bytecode 是Java虚拟机-运行/解释/将字节码转换为本 机代码 是即时编
问题内容: lambda表达式中使用的变量应该是final或有效的final 当我尝试使用它时会显示此错误。 问题答案: 可变装置,它可以被实例化一次。在Java中,你不能在lambda以及匿名内部类中使用非最终变量。 你可以使用旧的for-each循环来重构代码: 即使我对这段代码有些不了解: 你调用;而不使用其返回值 使用分配,;你不会修改原始传递的内容,并且你不会在此方法中使用它 你总是返回
变量被编译器声明为const,导致无法编译