Android-Daily-Interview icon indicating copy to clipboard operation
Android-Daily-Interview copied to clipboard

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

Open Moosphan opened this issue 4 years ago • 6 comments

Moosphan avatar Jan 02 '20 01:01 Moosphan

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

EightMinuteYouth avatar Jan 02 '20 01:01 EightMinuteYouth

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

zhaoerlei1989 avatar Jan 02 '20 01:01 zhaoerlei1989

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

JianhuaWan avatar Jan 03 '20 07:01 JianhuaWan

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

renzhenming avatar Aug 01 '22 09:08 renzhenming

这是来自QQ邮箱的假期自动回复邮件。   您好,我最近正在休假中,无法亲自回复您的邮件。我将在假期结束后,尽快给您回复。

Empty0Qc avatar Aug 01 '22 09:08 Empty0Qc

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

image

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

image image

yizems avatar Aug 01 '22 12:08 yizems