拿数据做操作,有悖于面对对象操作
强调做什么,而不是过程
有一个接口
接口只有一个抽象方法
(形式参数) -> {代码块}
():形式参数
->:箭头
{}:代码块
public interface test1 {
void domain();
}
public class doDemo1 {
public static void main(String[] args) {
doDoMain(() -> System.out.println("domain"));
}
public static void doDoMain(test1 t){
t.domain();
}
}
public interface test2 {
void domain(String s);
}
public class doDemo2 {
public static void main(String[] args) {
doDoMain((String s) -> {
System.out.println(s);
});
doDoMain((s) -> System.out.println(s));
doDoMain(s -> System.out.println(s));
}
public static void doDoMain(test2 t) {
t.domain("domain");
}
}
public interface test3 {
int add(int a, int b);
}
public class doDemo3 {
public static void main(String[] args) {
doAdd((int a, int b) -> {
return a + b;
});
doAdd((a, b) -> a + b);
}
public static void doAdd(test3 t) {
int sum = t.add(10, 20);
System.out.println(sum);
}
}
先使用方法,后定义方法体
必须有上下文环境,才能推导出lambda对应的接口
匿名内部类:接口、抽象类、具体类
Lambda:接口
匿名内部类:无抽象方法个数限制
Lambda:只能有一个抽象方法
匿名内部类:产生一个class字节码文件
Lambda:字节码动态生成