Lambda表达式创建函数式接口对象
为什么使用lambda表达式
- 避免匿名内部类定义过多
- 可以让代码更简洁
- 去掉无意义代码,只留下核心逻辑
对于函数式接口,可以通过lambda表达式来创建该接口的对象
//推导lambda表达式
public class TestLambda01 {
//3.静态内部类
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();
like=new like2();
like.lambda();
//4.局部内部类
class like3 implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda3");
}
}
like = new like3();
like.lambda();
//5.匿名内部类,没有类的名字,必须借助接口或者父类
like = new Ilike() {
@Override
public void lambda() {
System.out.println("i like lambda4");
}
};
like.lambda();
//6.用lambda简化
like = ()-> {
System.out.println("i like lambda5");
};
like.lambda();
}
}
//1.定义一个函数式接口:一个接口只包含一个抽象方法即为函数式接口
interface Ilike{
void lambda();
}
//2.实现类
class like implements Ilike{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
public class TestLambda02 {
static class Love2 implements ILove{
@Override
public void love(int a) {
System.out.println("I LOVE YOU2-->"+a);
}
}
public static void main(String[] args) {
class Love3 implements ILove{
@Override
public void love(int a) {
System.out.println("I LOVE YOU3-->"+a);
}
}
ILove love1 = new Love1();
love1.love(1);
ILove love2=new Love2();
love2.love(2);
ILove love3=new Love3();
love3.love(3);
ILove love4=new ILove() {
@Override
public void love(int a) {
System.out.println("I LOVE YOU4-->"+a);
}
};
love4.love(4);
//lambda表达式简化
// ILove love5=(int a)->{
// System.out.println("I LOVE YOU5-->"+a);
// };
//简化1:去掉参数类型
// ILove love5=(a)->{
// System.out.println("I LOVE YOU5-->"+a);
// };
//简化2:简化括号
// ILove love5=a->{
// System.out.println("I LOVE YOU5-->"+a);
// };
//简化3:去掉大括号
ILove love5=a-> System.out.println("I LOVE YOU5-->"+a);
love5.love(5);
//总结:
//lambda表达式只有一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹
//前提是接口位函数式接口
//多个参数也可以去掉参数类型,要去掉就都去掉,但必须加上括号包裹参数
}
}
interface ILove{
void love(int a);
}
class Love1 implements ILove{
@Override
public void love(int a) {
System.out.println("I LOVE YOU1-->"+a);
}
}
使用lambda表达式的前提是:接口必须是函数式接口!!!