Lambda表达式和匿名内部类
演示代码
public class LamdaStudy {
public static void main(String[] args) {
//匿名内部类
new Thread(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
System.out.println(Thread.currentThread().getName() + " has been started.");
}
}).start();
//Lambda表达式
new Thread(() -> System.out.println(Thread.currentThread().getName() + " has been started.")).start();
Runnable r = () -> System.out.println(Thread.currentThread().getName() + " has been started.");
new Thread(r).start();
}
}
运行结果
Lambda表达式与匿名内部类的区别
1. 所需类型不同
匿名内部类可以是接口,也可以是抽象类,还可以是具体类
Lambda表达式只能是借口
2. 使用限制不同
如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
如果接口中多于一个抽象方法,只能使用匿名内部类而不能使用Lambda表达式
3. 实现原理不同
匿名内部类编译后会产生一个单独的class字节码文件作为临时类进行调用
Lambda表达式编译过后不会产生单独的class字节码文件,对应的字节码会在运行的时候动态生成