函数式接口
- 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口
public interface Runnable{
public abstract void run();
}
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
lambda表达式
练习一:
//推导Lambda表达式
public class TestLambda1 {
// 3.静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda-->静态内部类");
}
}
public static void main(String[] args) {
ILike like = new Like();
like.lambda();
like = new Like2();
like.lambda();
// 4.局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda-->局部内部类");
}
}
like = new Like3();
like.lambda();
// 5. 匿名内部类,没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lambda() {
System.out.println("i like lambda-->匿名内部类");
}
};
like.lambda();
// 6. 用lambda简化
like =()->{
System.out.println("i like lambda-->lambda简化");
};
like.lambda();
}
}
// 1. 定义一个函数式接口
interface ILike{
void lambda();
}
// 2. 实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
- 运行结果
练习二:
public class TestLambda2 {
public static void main(String[] args) {
Love love = null;
//1. Lambda表达式简化
love =(int a)-> {
System.out.println("i love "+a);
};
//2. 简化括号
love =a-> {
System.out.println("i love "+a);
};
/*
love =(a,b)-> {
System.out.println("i love "+a);
System.out.println("i love 999");
};
*/
//3. 去掉花括号
love =a->System.out.println("i love "+a);
love.love(666);
/*总结:
lambda表达式只能有一行代码情况下才能简化成为一行,如果有多行,那么就用代码块包裹
前提:接口是函数式接口
多个参数也可以去掉参数类型,要去掉必须全部去掉,必须加上括号
*/
}
}
// 函数式接口
interface Love{
void love(int a);
}
总结:
lambda表达式只能有一行代码情况下才能简化成为一行,如果有多行,那么就用代码块包裹
前提:接口是函数式接口
多个参数也可以去掉参数类型,要去掉必须全部去掉,必须加上括号
为什么要使用Lambda表达式
- 避免匿名内部类定义过多
- 使代码看起来简洁
- 去掉了一堆没有意义的代码,留下核心代码