Lambda 表达式与 Java 匿名内部类相比,更简洁且可自动进行类型推断,但需要谨慎处理捕获变量和范围。
Lambda 表达式与 Java 匿名内部类的区别
简介
Lambda 表达式是 Java 8 引入的新特性,它提供了一种 concise 的方式来定义匿名函数。与 Java 匿名内部类不同,Lambda 表达式不需要声明一个类或实现一个接口。
语法
Lambda 表达式
(args) -> expression
匿名内部类
new InterfaceImplementer() { @Override public void someMethod() { // Body of the method } };
区别
实战案例
假设我们有一个 Comparator
接口,该接口有一个 compare
方法:
interface Comparator<T> { int compare(T o1, T o2); }
可以使用 lambda 表达式轻松实现这个接口:
// Lambda 表达式 Comparator<Integer> comp = (a, b) -> a - b;
也可以使用匿名内部类:
// 匿名内部类 Comparator<Integer> comp = new Comparator<Integer>() { @Override public int compare(Integer a, Integer b) { return a - b; } };
结论
Lambda 表达式是一种简化匿名内部类的便捷方式,但在捕获变量和范围方面需要格外小心。选择使用 lambda 表达式还是匿名内部类取决于具体情况。