lambda表达式与函数式接口
Posted 花伤情犹在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda表达式与函数式接口相关的知识,希望对你有一定的参考价值。
函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。
如定义了一个函数式接口如下:
interface Test
{
void cnm();//只能有一个抽象方法,如果定义多个抽象方法就不能使用lambda表达式
}
Lambda语法
包含三部分:
- 一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数
- 一个箭头符号:->
- 方法体,可以是表达式和代码块。
(parameters) -> expression 或者 (parameters) -> { statements; }
注意:
(parameters) -> expression 只适合代码语句仅有一行
(parameters) -> {statements; } 适合多行代码语句
通过下面的代码可以看到lambda表达式设计的代码更简洁,而且可读性更好。
函数式接口:
public interface Test {
void cnm();
}
Test类:
public class Test1 {
public static void main(String[] args) {
/*
Test就是一个函数式接口:我只写了一个方法cnm()方法。
1、因为cnm()方法没有参数,所以 ->前面的()中不需要声明形参
2、cnm返回的是void,所以不需要return。
3、->后面写的代码其实就是定义在cnm方法内的代码。因为此处代码只有一行,所以{}也可以省略。如果此处多与一行,则无法省略。
*/
//使用匿名内部类实现Test接口的抽象方法
new Test(){
@Override
public void cnm() {
System.out.println("这个是用匿名内部类实现的方法");
}
}.cnm();
//使用lambda表达式实现Test接口的抽象方法
Test test=()-> System.out.println("这个是用lambda表达式实现的方法");
test.cnm();
}
}
输出结果:
这个是用匿名内部类实现的方法
这个是用lambda表达式实现的方法
以上是关于lambda表达式与函数式接口的主要内容,如果未能解决你的问题,请参考以下文章