栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么Java 8 Lambda允许访问非最终类变量?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么Java 8 Lambda允许访问非最终类变量?

我们都同意第一个例子不能用,因为局部变量或参数必须是最终的或有效的最终才能在lambda表达式主体中使用。

但是您的第二个示例不涉及局部变量或参数,而是

str
实例字段。Lambda表达式可以使用与实例方法相同的方式访问实例字段:

15.27.2。
λ体

Lambda主体可以是单个表达式或块(第14.2节)。类似于方法主体,lambda主体描述了每次调用都会执行的代码。

实际上,java编译器

lambda$0
从您的lambda表达式中创建了一个私有方法,该方法仅访问实例字段
str

private java.lang.String lambda$0() {    0 aload_0;         1 getfield 14;     4 areturn;}

另一观点: 您还可以

Supplier
使用普通的匿名内部类来实现:

public Supplier<String> makeSupplier() {    return new Supplier<String>() {        public String get() { return str; }    };}

从内部类访问实例字段非常普遍,而不是Java 8的专业。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号