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

本地类可以访问Java 8中的非最终变量

仲柏
2023-03-14
问题内容

在Java
8之前,我们无法在本地类中使用非最终变量。但是现在,它们允许final以及有效的final(其值未更改)可以被本地类引用。我所知道的(如果我错了,请纠正我),他们不支持引用非最终值,因为那里的值可以更改。因此,他们现在如何支持它,以及为什么以前不支持它。


问题答案:

实际上,情况根本没有改变。编译器稍微聪明一点,不再强迫您使用final关键字。

如果它检测到的变量是 有效的 决赛中,即,分配的只有一次,也绝不之后,一切都很好。如果它检测到它不是有效的final,它将拒绝编译。

因此,它不是强制您将变量定为final,而是自动检测到它。但是,您仍然不能在内部类或lambda中使用无效的final变量



 类似资料:
  • 如何在Java 8 lambda中使用非final变量。它抛出编译错误,称“封闭范围中定义的局部变量日期必须是final或实际上是final” 我实际上想实现以下目标: 如何实现此目的?它会为 date2 引发 comilation 错误。谢谢

  • 问题内容: 我了解为什么编译器不接受以下内容: 让我感到困惑的是,编译器接受以下内容,并且单元测试通过了: 为什么上述方法有效并且可以正常工作?欢迎使用指向JLS相关部分的指针(15.27.2节仅讨论局部变量)。 问题答案: 我们都同意第一个例子不能用,因为局部变量或参数必须是最终的或有效的最终才能在lambda表达式主体中使用。 但是您的第二个示例不涉及局部变量或参数,而是实例字段。Lambda

  • 问题内容: 我正在尝试将java8 forEach循环内的布尔变量更改为true,这是非最终的。但是我遇到了以下错误:在封闭范围内定义的必需局部变量必须是final或有效的final。 如何解决这个错误? 代码: 这是我在函数中创建的变量。 现在,当我尝试更改它时: 我收到错误消息:封闭范围中定义的必需局部变量必须是final或有效的final。 为什么会出现此错误,以及如何解决? 问题答案: 您

  • 我理解为什么编译器不接受以下内容: 令我困惑的是编译器接受以下内容,并且单元测试通过了: 为什么上面的是有效的,工作正常?欢迎提供JLS相关章节的链接(第15.27.2节。只谈局部变量)。

  • 问题内容: 我一直在寻找一些Java基本集合(的宝库,fastutil,HPPC)和我已经注意到,类变量有时声明为图案的局部变量。例如: 我已经进行了一些基准测试,看来这样做时速度 稍 快,但是为什么会这样呢?我试图了解如果注释掉函数的前三行,那么Java将有何不同之处。 注意:这似乎与此问题相似,但这是针对c ++的,并且没有解决为什么声明它们的原因。 问题答案: 此处的关键字是红色鲱鱼。之所以