Moosphan/Android-Daily-Interview

2020-01-02:分别通过对象表达式object和lambda表达式实现的函数式接口内部有何不同?

Moosphan opened this issue · 6 comments

2020-01-02:分别通过对象表达式object和lambda表达式实现的函数式接口内部有何不同?

好像没有大致的区别,lambda只支持一个函数体而object可以是多个,还有一个区别就是以闭包的形式实现lambda还可以传递某个方法的作用域

没有感觉有多大区别,或者我没有那么熟悉

写setOnclickLister 和setOnItemClickLisernter就很明显了,lambda适用于一个回调的场景

1.object是匿名内部类的形式,匿名内部类是在编译后形成一个class
2.Lambda表达式是在程序运行的时候动态生成class

有区别, 区别很小
如果是使用 Object 继承的话, 会编译为匿名内部类, 和Java的并无区别

image

但是如果是 使用 lambda 的话, 实现代码会保留在原类中, 编译成的匿名内部类是 一个中转类, 类似于Java8, 也可能是跟我使用的 目标版本是 java8 相关
image

image
image