函数式接口

函数式接口

  • 在 Java 中,当接口中只有一个抽象方法时,该接口就称为函数式接口。
  • 函数式接口,即适用于函数式编程场景的接口。
  • 而 Java 中的函数式编程就是 Lambda,即函数式接口就是可以适用于 Lambda 使用的接口。
  • 接口中只有一个抽象方法时,Java 中的 Lambda 才能顺利地进行类型的推导。
  • 函数式接口都是先使用 Lambda 接口实现方法体,再调用接口中的方法。

函数式接口的格式

@FunctionalInterface 注解:

//这个注解是 JDK1.8 新增的特性,用来修饰接口的定义,表明该接口是一个函数式接口。@FunctionalInterface
interface 接口名{
 //返回类型 方法名(参数列表);
}// Runnable、Comparator 都属于函数式接口。

自定义函数式接口

无参无返回值

 案例步骤1. 定义一个函数式接口 Eatable,加上注解:@FunctionalInterface2. 接口中包含抽象 eat()方法,没有参数或返回值。3. 在 main()函数中使用 Lambda 创建 Eatable 对象,输出一句话:吃东西。4. 调用对象的 eat()方法

案例代码

@FunctionalInterfaceinterface Eatable {void eat();}public class DemoFunctional {public static void main(String[] args) {//使用 lambda 表达式实现对象
​
 Eatable eatable = ()-> System.out.println("吃东西");
​
 eatable.eat();}
}

有参有返回值

案例步骤1. 定义一个函数式接口 Sumable,加上注解:@FunctionalInterface2. 接口中包含抽象 int sum(int a, int b)方法,将两个 int 数字相加返回 int 结果。3. 在类中通过 Lambda 实例化 Sumable 接口,并且调用 sum()方法4. 输出计算结果的值

//有返回值,有参数@FunctionalInterfaceinterface Sumable {int sum(int a, int b);}public class DemoFunctional {public static void main(String[] args) {//实例化接口
​
 Sumable sumable = (a, b) -> a + b;//调用方法int sum = sumable.sum(5, 10);//输出计算结果
​
 System.out.println("计算结果:" + sum);}}

关于@FunctionalInterface 注解的说明:

  • 该注解用在只有一个抽象方法的接口上,接口中可以存在其它的非抽象方法。
  • 如果该接口有超过一个抽象方法,则编译失败。
  • 接口中的静态方法和默认方法都不是抽象方法。
  • 接口中定义的与 Object 类同名的抽象方法不算抽象方法,因为此接口的实现类一定是 Object 的子类,会自动实现这个接口中定义的抽象方法。
  • 如果接口中只有一个抽象方法,不管是否使用@FunctionalInterface 修饰,该接口都是函数式接口.
  • 加上注解的目的是让编译器进行语法检查,类似于以前学的@Override 注解。
  • 接口加这个注解还可以限制后期对此接口修改时再加上新的抽象方法,从而保证这个函数式接口只有一个抽象方法。

下面定义的接口是否是函数式接口,编译能不能通过?为什么?

@FunctionalInterface
public interface Animal {
   
void eat();
   
public String toString();
   
default void sleep() {
System.out.println("睡觉");
}
   
static void move() {
    System.out.println("行走");
  }
}

接口中定义的与 Object 类同名的抽象方法不算抽象方法,

接口中的静态方法和默认方法都不是抽象方法。

转自函数式接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值