jdk1.8引入的新写法,
避免匿名内部类定义过多
实质是函数,如(params)->expression[表达式]
任何接口,如果只包含一个抽象方法,那他就是一个函数式接口
如
public interface Runnable{
public abstract void run();
}
过程
//定义一个函数式接口
interface Like{
void lambda();
}
//实现
class Ilike implements Like{
@Override
public void lambda() {
System.out.println("i like lambda");
}
}
//局部内部类
class Like3 implements Like{
@Override
public void lambda() {
System.out.println("like3");
}
}
Like like = new Like3();
like.lambda();
//匿名内部类
like = new Like() {
@Override
public void lambda() {
System.out.println("like5");
}
};
like.lambda();
//用lambda
Like like1 = ()->{
System.out.println("I like lambda6");
};
like1.lambda();
//静态内部类
static class Like4 implements Like{
@Override
public void lambda() {
System.out.println("like4");
}
}
这样我们的代码就更加简介了,去掉了没有意义的代码,留下了核心逻辑
然后是简化
interface Loves{
void love(String name);
}
Loves loves;
loves = (String name)->{
System.out.println("I love youe," + name);
};
loves.love("lgd");
//简化,去掉参数类型
Loves love = (name)->{
System.out.println("I love2"+name);
};
//去掉括号
loves = name->{
System.out.println("I love3"+name);
};
//去掉花括号
loves = name-> System.out.println("I loves4"+name);
//最终版简化
Loves loves1 = name-> System.out.println("I love5" + name);
总结:
lambda表达式只能有一行代码情况下才可简化成为一行
多行就要用花括号,代码块
前提,接口为函数时接口,多个参数也可以去掉参数类型,当然
要去就都去掉