【Java】对Java函数式接口(Functional Interface)的理解

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口可以被隐式转换为 lambda 表达式。

Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。

如定义了一个函数式接口如下:

@FunctionalInterface
interface GreetingService 
{
    void sayMessage(String message);
}

那么就可以使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的):

// 程序知道System.out.println("Hello " + message)是对sayMessage方法的实现,并且知道message是它的参数
GreetingService greetService1 = message -> System.out.println("Hello " + message);

以上内容引用自菜鸟教程:https://www.runoob.com/java/java8-functional-interfaces.html

关于Java的函数式接口我的理解是:使用@FunctionalInterface来限制一个接口的方法数量(事实上不加这个注解,按其要求定义接口也可以作为函数式接口),以便于在实现该接口的方法时,无需告诉程序我实现的是哪个方法(因为只有一个抽象方法),程序能够准确的知道当前需要实现的是哪个方法,就如上面对GreetingService的调用。

这样就可以引入lambda表达式了,在写代码时候就像参数列表中传入了一个匿名函数一样,也就是函数式编程中的**函数可以接受函数当作输入(参数)**的思想。

但不能说Java是一门函数式语言,因为Java的lambda表达式不是真正的传入了一个函数,而只是以函数的形式完成了接口的实现。并且**函数可以接受函数当作输入(参数)**只是函数式编程的特性之一(还有柯里化、模式匹配等),因此只能说Java具备一点函数式编程(思想)。

对于函数式编程本人理解的不够深入,在学习中,如果有写的不对的地方,还请帮忙留言指证

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WGeeker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值