Lambda表达式和匿名类的区别:
1.所需类型不一样
匿名内部类:可以是 类,抽象类,接口
Lambda:必须是接口
2.抽象方法的数量不一样
匿名内部类:所需的接口中的抽象方法的数量是随意的
Lambda表达式:所需的接口中只能有一个抽象方法
3.实现原理不一样
匿名内部类:编译之后,产生一个单独的.class字节码文件
Lambda表达式:编译之后,没有一个单独的字节码文件。对应的字节码会在程序运行的时候生成。
简单演示代码
package com.java.lambda;
@FunctionalInterface
public interface UserService {
void show();
}
package com.java.lambda;
public class LambdaDemo {
public static void main(String[] args) {
// 匿名内部类写法
goShow(new UserService() {
@Override
public void show() {
System.out.println("匿名内部类 show方法执行了...");
}
});
System.out.println("-------------");
// Lambda写法
goShow(() -> System.out.println("Lambda show方法执行了..."));
}
private static void goShow(UserService userService) {
userService.show();
}
}
以上就是我对Lambda表达式和匿名类的区别的理解,如果文章由于我学识浅薄,导致您发现有严重谬误的地方,请一定在评论中指出,我会在第一时间修正我的文章,以避免误人子弟。