📅  最后修改于: 2023-12-03 15:37:02.257000             🧑  作者: Mango
在 Java 语言中,匿名内部类和 Lambda 表达式都可以用来创建函数式接口的实例。但是它们在语法上和功能上都有一定的区别。
匿名内部类和 Lambda 表达式的语法有以下的区别:
new
实例化一个对象,并且需要提供一个类名或接口名作为参数,而 Lambda 表达式直接提供一个方法体。以一个实现 Runnable 接口的例子来比较两者的语法区别:
// 使用匿名内部类
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello, anonymous class!");
}
};
// 使用 Lambda 表达式
Runnable r2 = () -> System.out.println("Hello, lambda!");
尽管匿名内部类和 Lambda 表达式都可以用来创建函数式接口的实例,但是它们在功能上也存在差异:
Lambda 表达式以及函数式编程可以帮助我们写出更加简洁、易读的代码,特别是当我们需要使用函数式接口的时候。尽管如此,匿名内部类在某些特定的场景下仍然非常有用,比如需要访问外部类的成员变量或方法。
综上,我们应该根据不同的需求选择匿名内部类和 Lambda 表达式来实现相应的功能。