首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Lambda表达式基础(五)- Lambda表达式是对象吗

2013-12-04 
Lambda表达式基础(5)- Lambda表达式是对象吗?Lambda表达式是对象吗?是的,要加一个限定条件:他们是对象子类

Lambda表达式基础(5)- Lambda表达式是对象吗?
Lambda表达式是对象吗?

是的,要加一个限定条件:他们是对象子类型的实例,但不一定有唯一标识。一个Lambda表达式是一个函数式接口的一个实例,它本身就是Object的子类型的一个实例。为了说明这一点,考虑下面的合法赋值:
    Runnable r = () -> {};   // 创建一个Lambda表达式并赋值给一个引用变量r 
    Object o = r;            // 普通宽化转换

为了理解这种情况,了解在java8的实现中有短期目标和长期愿景两种情况是很有帮助的。短期目标是支持集合内部迭代,以有效利用日益增长的硬件的并行特性。长期愿景是引导java支持更趋向于函数式的编程。当前只有短期目标在推进中,但设计师们小心翼翼以避免破坏函数式编程的设想,这可能在将来会有完全成熟的函数类型,诸如在Haskell和Scala中发现的那样。

要回答Lambda是否是对象的问题就必须要基于它们是如何融入Java的类型系统中而不是在某个时刻他们是如何碰巧被实现的。他们作为对象的情形源于让它们实例化接口的基本决策,有正反两面

1 这使得lambda表达式以相对较少的干扰融入现有的类型系统;
2 Lambda表达式继承了Object的方法。

但是请注意,因为lambda表达式不必有唯一标识,继承自Object的equals方法跟原来的语义不一致。

原文链接:http://www.lambdafaq.org/are-lambda-expressions-objects/

热点排行