[java核心技术]-函数式接口

概念

函数式接口指的是:有且只有一个抽象方法的接口

函数式接口,适用于函数式编程场景的接口。而java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。


定义一个函数式接口

在这里插入图片描述
这样就定义了一个函数式接口

但是一个接口是可以有多个抽象方法的
要如何确定自己定义的的确是一个函数式接口呢

如下图,他是不能被当做函数式接口的,因为有多个抽象方法
在这里插入图片描述
这个时候我们就要用到一个注解@FunctionalInterface
打上这个注解之后立马报错了
在这里插入图片描述
然后删掉method2方法呢
在这里插入图片描述
就没有任何报错了

所以@FunctionalInterface注解的作用是用来检测是否符合函数式接口的标准


使用函数式接口

定义完毕了,我们就该使用了

函数式接口的使用一般是在参数中使用的更多一些

所以我在主类里面定义了一个方法

/** 此方法用于展示一个接口参数的传入,并且调用 **/
public static void show(FunctionInterface fun){
	fun.method();
}

所以这里就用参数的形式展示

下面展示3中使用函数式接口的方法

1.写一个接口的实现类

/** FunctionInterface的实现类 **/
public class FunctionInterfaceImpl implements FunctionInterface {
    @Override
    public void method() {
        System.out.println("实现类的method方法");
    }
}

定义完实现类之后就该使用它了

public static void main(String[] args) {
//1.直接使用实现类
    show(new FunctionInterfaceImpl());
}

然后点击运行,运行结果如下

实现类的method方法

2.使用匿名内部类的形式

public static void main(String[] args) {
    //2.使用匿名内部类
    show(new FunctionInterface() {
        @Override
        public void method() {
            System.out.println("这里使用的是匿名内部类的method方法");
        }
    });
}

然后点击运行输出

这里使用的是匿名内部类的method方法

3.使用Lambda表达式

public static void main(String[] args) {
   //3.使用匿名内部类
    show(()->{
        System.out.println("这里使用的Lambda表达式");
    });
}

然后运行结果如下

这里使用的Lambda表达式

我们还可以对上面的Lambda表达式进行简化

public static void main(String[] args) {
    //如果Lambda表达式里面只有一句代码那么可以省略花括号和分号
    show(()->System.out.println("这里使用的Lambda表达式"));
}

然后他的运行结果和上面的是一模一样的


带参数和返回值的函数式接口以及Lambda表达式

首先定义一个函数式接口

@FunctionalInterface
interface FunctionInterfaceAdd{
    int add(int a,int b);
}

然后在主类写,这里就不当参数了,这里当变量

public static void main(String[] args) {
    int n1=3,n2=2;//声明两个变量,当做参数
    
	//这里的a和b是Lambda表达式里面的参数
    FunctionInterfaceAdd fa =(a,b)->{return a*b+b;};
    
    //执行方法
    int add = fa.add(n1, n2);
    
    //输出add的值
	System.out.println("add = " + add);
	//输出:add = 8
}

当然这个还是可以简写的
这里只写表达式那一行

//简写前的Lambda表达式
FunctionInterfaceAdd fa =(a,b)->{return a*b+b;};

//简写后的Lambda表达式
FunctionInterfaceAdd fa = (a,b)->a*b+b;

相比之下,去掉了花括号,去掉了return,去掉了分号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Timeless小帅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值