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

能够在Java 8 lambda表达式中有效使用最终变量的好处是什么

邹誉
2023-03-14
问题内容

我已经理解了“有效最终”的含义,正如“最终”和“有效最终”之间的区别所解释的。

我不明白的是为什么对于lambda表达式/异常内部类需要使用有效的最终变量?Java 8为什么要放松其必须将变量声明为final的限制?

只是保存final变量之前的类型吗?还是能够有效使用最终变量的能力还有其他优势?


问题答案:

简单的答案是,由于final变量和“有效最终”变量之间没有区别,除了final声明中的关键字外,唯一的目的是允许省略final关键字。

但这可能会产生比您所意识到的更大的影响。

对于lambda表达式,可以像中那样简化参数的整个声明x -> x+1。现在考虑嵌套的lambda表达式,例如:x -> y -> x+y和如果我们在此处强制向参数添加final声明将创建的视觉混乱x

由于没有Java语法将变量声明为final未指定其类型,因此它要么要求规范向语言添加甚至更复杂的结构,要么强制我们添加final参数,并向将简单表达式x-> y -> x+y转换为的参数添加类型声明(final double x) -> y -> x+y

主要目标是 简化
Java程序员(在添加新的编程语言功能时,尽可能做到这一点)。当然,它没有为语言提供任何功能来解决以前没有它无法解决的问题(这对整个lambda功能都适用),但是在表达能力上有显着的收获,不仅因为您可以省略final修饰符,而且可以省略修饰符帮助。它的工作原理
一起 使用改进的类型推断,新的编程API,当然,lambda表达式和方法的引用。



 类似资料:
  • 我已经理解了“有效最终”的含义,正如最终和有效最终之间的差异所解释的那样。 我不明白的是,为什么lambda表达式/烦人的内部类需要使用有效的最终变量?为什么Java 8会放宽变量必须声明为最终变量的限制? 仅仅是为了保存变量前的< code>final的键入吗?或者,能够有效地使用最终变量的能力是否有其他优势?

  • 我正在研究java 8流,我唯一的问题是理解lambdas为什么lambdas中的有效最终警告会被忽略,例如(和静态)变量。我似乎在网上找不到任何对它的引用,因为大多数页面只会谈论“有效最终”的定义。

  • 问题内容: 6年前关闭。 有关匿名类的文档说明 匿名类无法在其封闭范围内访问未声明为final或有效地为final的局部变量。 我不明白变数为“有效的最终”是什么意思。有人可以提供一个示例来帮助我理解这意味着什么吗? 问题答案: 有效地最终意味着它在获得初始值之后永远不会改变。 一个简单的例子: 在这里,并没有声明为final,但是由于它从未更改,因此实际上被认为是 final 。 从Java 8

  • 问题内容: 这个问题已经在这里有了答案 : 为什么在匿名类中只能访问最终变量? (15个答案) 为什么实例变量“忽略Lambda表达式中使用的变量必须是最终变量或实际上是最终变量”警告[重复] (2个答案) Lambdas:局部变量不需要最终变量,实例变量不需要 (10个答案) 2年前关闭。 当我编写此代码时,我收到一个编译时错误,该错误是: “ lambda中的变量必须是final或有效的fin

  • 问题内容: 我试图通过执行程序和可运行程序并行执行100个任务,该任务需要使用循环变量: 我在“我”的语气中a不休- 据我所知,由于每次迭代都会更改循环变量,因此无法使其成为最终变量或有效地成为最终变量。我找到了一个简单的解决方法, 在我看来,这并不是最有效的解决方案,因为每次迭代都要声明一个新变量。有更好的方法吗? 问题答案: 有更好的方法吗? 我对此表示怀疑。您的解决方案对我来说看起来不错,但