这玩意是个希腊字母,叫个烂姆达
在代码中可以使用它,就是为了避免匿名内部类定义过多,本质属于函数式编程的概念
首先来理解以下函数式接口,这是学习JAVA8 lambda关键
函数式接口:
·任何接口,如果只包含一个抽象方法,那这就是函数式接口
//暂时假定Runnable就长这样
public interface Runnable{
public abstract void run();
}
·对于函数接口我们可以使用lambda来写,可以简化我们的代码,来吧展示一段
public class Testlambda1 {
//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");
}
}
执行结果不出所料:
lambda的本质就是 函数式接口实现类的实例
这东西也可以加个参数的
public class Testlambda2 {
public static void main(String[] args) {
ILove love = (int a)->{
System.out.println("I Love "+a);
};
love.love(10);
}
}
interface ILove{
void love(int a);
}
执行下来同样有效,而且会带着参数
对于这种只有一行语句的方法体,还可以更简化,比如去掉 int ,去掉括号,去掉花括号,但是还是别太简化了,正经点写