必须要求
定义一个只有一个方法的接口
lambda的前置条件-接口定义
interface ILike {
void lambda(int i, char letter);
}
lambda的演变
-
- 实现类
-
- 静态内部类
-
- 局部内部类
-
- 匿名内部类
-
- lambda
-
- 当lambda的内容体只有一行时
-
- 省略参数类型(要么都省略,要么都加上),单个参数可以省略掉括号
/**
* 1. 实现类
*/
class Like1 implements ILike {
@Override
public void lambda(int i, char letter) {
System.err.println("lambda " + i + " " + letter);
}
}
/**
* lambda的产生过程(逐步简化)
*/
public class Demo1 {
static class Like2 implements ILike {
@Override
public void lambda(int i, char letter) {
System.err.println("lambda " + i + " " + letter);
}
}
public static void main(String[] args) {
// 1.实现类
ILike like = new Like1();
like.lambda(1, 'A');
// 2.静态内部类
like = new Like2();
like.lambda(2, 'B');
// 3.局部内部类
class Like3 implements ILike {
@Override
public void lambda(int i, char letter) {
System.err.println("lambda " + i + " " + letter);
}
}
like = new Like3();
like.lambda(3, 'C');
// 4.匿名内部类,没有类的名称,必须借助接口或父类
like = new ILike() {
@Override
public void lambda(int i, char letter) {
System.err.println("lambda " + i + " " + letter);
}
};
like.lambda(4, 'D');
// 5.lambda
like = (int i, char letter) -> {
System.err.println("lambda " + i + " " + letter);
};
like.lambda(5, 'E');
// 6. lambda的内容体只有一行时
like = (int i, char letter) -> System.err.println("lambda " + i + " " + letter);
like.lambda(6, 'F');
// 7. 简化参数,单个参数甚至可以简化掉括号
like = (i, letter) -> System.err.println("lambda " + i + " " + letter);
like.lambda(7, 'G');
}
}