JDK8接口与Lambda表达式

本文对比了Java 1.7与1.8中接口的区别,介绍了1.8新增的静态方法、默认方法以及函数式接口的概念。详细解释了Lambda表达式的使用,使代码更简洁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近回顾了下接口,对比了之前jdk7与jdk8中的区别,为此做一次总结。

接口&函数式接口:

首先,关于接口这个类型做一个简单的介绍。接口其实类似于我们生活中经常会用到的各种插口。比如插座、墙角的那种,它可以为我们提供某项特定的功能,我们只需要在需要的时候使用,并且将一些我们需要的功能重新修改然后再使用,也是非常方便的存在。
在java的jdk7中,也就是java1.7版本里,接口被定义为一个极端抽象类,意思是里面只有抽象方法。对于抽象方法来说,就只有被继承重写和匿名内部类重写了。紧接着在java1.8中,重新对接口进行定义,接口中不仅包含有抽象方法,还可以有被static修饰的静态方法以及被default修饰的默认方法。
静态方法自然不用多说,对于default修饰的默认方法,可以在接口中直接定义方法体,这样可以被子接口直接继承,类在实现此接口时也不用进行重写。使接口与接口、接口与类之间的联系更加紧密。值得注意的是,当两个接口都定义了同一种default的方法签名,那么当一个接口同时继承这两个接口时,这个默认方法就必须要进行重写,因为不清楚到底调用的是哪一个接口中的方法,如图所示:
在这里插入图片描述
解决途径:
在这里插入图片描述
同时,在1.8中,引入了函数式接口(FunctionalInterface)这个名词。函数式接口指的是一个借口中,有且只有一个抽象方法,那么这个接口就称之为函数式接口。对于函数式接口,我们可以在定义的之前加上@FunctionalInterface来进行检测,如果不符合函数式接口的定义方式,则会报错,如图所示:
在这里插入图片描述
此时由于该接口中有两个·抽象方法,所以会报错。

Lambda表达式:

与函数式接口所对应的就是标题中所说的——Lambda表达式了,Lambda表达式的引入使得代码可以更加简洁,但是如果复杂一点看起来也并不是特别容易理解。如图所示:

这是一个函数式接口A,只有一个简单大抽象方法
Lambda表达式的符号是()->,也成为钻石运算符。在上图中,A是一个函数式接口,里面定义了一个抽象方法。在main方法中创建接口的引用,同时在后面使用lambda表达式进行重写。()内是传入的参数名称,->可以理解为实现内部方法,如果重写的方法体只有一句,则可以省略{},如果只有ruturn则return可以省略。在此例中,表示实现的是返回3加上一个int型的bc这个值,所以最后放回结果为12,下图为方法体有多句的情况:

在这里插入图片描述
该程序运行结果为13

以上是我对1.8版本的接口以及Lambda表达式的一个简要概括,欢迎补充讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值