Lambda FAQ_5.Lambda表达式是对象吗

18 篇文章 0 订阅
17 篇文章 0 订阅

Lambda表达式是对象吗?


是的,但是有一个限制:他们是**Object**子类型的实例,但是没有必要持有唯一标识符(unique identity)。一个Lambda表达式是功能接口的一个实例,而功能接口本身是**Object**的子类型。为了更容易理解,考察下面的合法赋值语句:

Runnable r = () -> {};
Object o = r;

为更好的理解,明白在Java8实现时考虑的短期目标和长期目标是有用的。短期目标是支持集合的内部迭代,增加并行处理的兴趣。长期目标是引导Java支持更多函数式编程风格。目前仅仅支持了短期目标,但是设计者非常小心的避免将来Java中函数式编程可能出现的妥协,将来可能会像Haskell和Scala一样包含全部函数类型。


Lambda表达式是否是对象的答案是根据Lambda表达式处于Java类型系统的何处,而不是它们在某一时刻如何被实现来判断。它们是对象,这是起源于将它们实现为接口实例的基础决议,这点有好的一面也有坏的一面:

  • 它使lambda表达式以相对少的忧虑融入现在的类型系统
  • lambda表达式继承了**Object**的方法

要注意的是,因为lambda表达式没有必要持有唯一标识符,所以继承自Object类的equals方法不具备一致的语义。


原文

原文地址


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值