函数式接口的定义
任何接口如果只包含一个抽象方法,那么它就是一个函数式接口
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
为什么要用lambda表达式
- 避免内部类定义过多
- 可以让你的代码看起来简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑
(params)->expression(表达式)
(params)->statement(语句)
(params)->{statements}
package lambda;
/**
* 推导lambda表达式
*/
public class LambdaTest {
//静态内部类
static class Like2 implements ILike {
@Override
public void lambda() {
System.out.println("I like lambda2");
}
}
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
Like2 like2 = new Like2();
like2.lambda();
//局部内部类
class Like3 implements ILike {
@Override
public void lambda() {
System.out.println("I like lambda3");
}
}
Like3 like3 = new Like3();
like3.lambda();
//匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lambda() {
System.out.println("I like lambda4");
}
};
like.lambda();
//用lambda简化
like = ()->{
System.out.println("I like lambda5");
};
like.lambda();
}
}
//定义一个函数式接口
interface ILike {
void lambda();
}
//实现类
class Like implements ILike {
@Override
public void lambda() {
System.out.println("I like lambda");
}
}
package lambda;
public class LambdaTest2 {
public static void main(String[] args) {
//lambda表达式
ILove love = (int a)->{
System.out.println("I love you---" + a);
};
//简化:参数类型
love = (a)->{
System.out.println("I love you---" + a);
};
//简化:简化括号
love = a -> {
System.out.println("I love you---" + a);
};
//简化:去掉花括号
love = a->{
System.out.println("I love you---" + a);
};
love.love(520);
}
}
interface ILove {
void love(int a);
}