Java开发笔记(六十二)如何定义函数式接口

本文深入探讨了Java中的函数式接口概念,解释了Lambda表达式如何与函数式接口配合使用,以提高代码的灵活性。通过示例说明了如何自定义函数式接口并应用于动物行为模拟,展示Lambda表达式如何简化代码。函数式接口的运用让方法作为参数传递成为可能,避免了大量子类的创建,实现了行为的动态定义。
摘要由CSDN通过智能技术生成

前面介绍了Lambda表达式的用法,从实践中发现它确实极大地方便了开发者,然而不管是匿名内部类还是Lambda表达式,所举的例子都离不开各类数组的排序方法,倘使Lambda表达式仅能用于sort方法,无疑限制了它的应用范围。那么除了sort方法,还有哪些场景能够将Lambda表达式派上用场呢?既然匿名内部类与Lambda表达式都依附于某种接口,追根究底,就得好好研究一下这种接口的特别之处。
关于排序方法sort的第二个输入参数,原本定义的参数类型是比较器Comparator,可是这个比较器真正有用的实乃唯一一个抽象方法compare。之前阐述Lambda表达式概念的时候,提到Lambda表达式指的是匿名方法,并且由于Java不支持把方法作为参数类型,因此只好再给方法加一层接口的包装,于是sort方法里的参数类型变为Comparator接口而非compare方法了。
像Comparator这种挂羊头卖狗肉的接口,表面上是接口的结构,实际上给某个方法专用,为了有别于其它普通接口,它被Java称作“函数式接口”。函数式接口拥有一般接口的形态,但其内部有且仅有一个抽象方法(方法也叫做函数),而这也是外部调用时采取Lambda表达式改写的方法。除此之外,函数式接口还允许定义别的非抽象方法,包括默认方法与静态方法。
搞清楚了函数式接口的来龙去脉,接下来不妨自定义一个全新的函数式接口。之前讲到普通接口之时,定义了一个行为接口给各个动物类实现,这意味着行为动作的方法代码与类定义代码在一起定义。如果来了一个新的动物,就得提供对应的动物类定义及其动作代码,日积月累各种动物类势必越来越多。不过很多业务场景希望更灵活的逻辑,往往只要定义一个基础的动物类,然后动物的每样属性都由成员方法读写,甚至动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值