java - 为什么从 JDK 8 开始,本地内部类(方法内部)可以访问封闭方法的非最终局部变量?
问题描述
class Outer
{
public void method1()
{
int x = 10;
class Inner
{
public void inMethod()
{
System.out.println(x);
}
}
Inner i = new Inner();
i.inMethod();
}
public static void main(String[] args)
{
Outer obj = new Outer();
obj.method1();
}
}
我在 StackOverflow 上经历了几个问题,即使这些问题都没有准确的答案。 方法局部内部类 - 可以访问非最终局部变量
解决方案
好吧,x
没有标记为最终,但它是effectively-final
。如果您在x += 5;
下面添加int x = 10;
,它将不再起作用,因为该变量不再是有效的最终变量。
https://www.baeldung.com/java-effectively-final
我想这主要是为了更好地支持 lambdas 而改变/实现的。final
想象一下,如果你想在 lambda 中使用它,你必须总是标记一个变量。
推荐阅读
- powershell - 查找 PowerShell 错误最初是终止还是非终止
- sql - MS SQL - 计算字段中单词的出现次数
- android - 如何将原始 h.264 文件转换为 mp4
- javascript - 警报关注输入字段后
- windows - 创建用于运行预定脚本的系统帐户?
- node.js - 带有 reactjs 和 nodejs 的 Shopify 应用程序没有 nextjs?
- java - 如何理解 java Path.toString() 方法
- c# - 为什么“Skip”和“Take”在获取的记录越来越多的情况下需要更长的时间?
- pyspark - Pyspark 中具有键值对的 AggregateByKey 函数
- reactjs - 如何强制反应路由器重新打开页面