与匿名内部类相比,lambda表达式更简单,编译器可以推断类型,但不能访问外部实例方法中的this关键字;匿名内部类更灵活,可以访问this关键字,但语法更复杂。
Java lambda表达式与匿名内部类的比较
介绍
lambda表达式和匿名内部类都是Java中实现匿名函数的方法。lambda表达式是Java 8中引入的一个新功能为编写匿名函数提供了一种简单明了的方法。匿名内部类是实现Java的更传统的匿名函数方法 8之前就存在了。
立即学习“Java免费学习笔记(深入);
语法
lambda表达式:
(parameters) -> { body }
匿名内部:
new InterfaceOrClass() { @Override public void method() { // body } };
比较
简洁:lambda表达式比匿名内部类更简洁。例如,以下代码创建了一个lambda表达式,接收整数并返回其平方值:
(n) -> n * n
匿名内部类实现相同的代码如下:
new Function<Integer, Integer>() { @Override public Integer apply(Integer n) { return n * n; } };
类型推断:编译器可以推断lambda表达式中的参数类型和返回值类型。这意味着您不需要明确地指定它们,这有助于提高代码的可读性和简洁性。
实例方法:lambda表达式不能访问外部实例方法中的this关键字。匿名内部类别可以访问this关键字,即使该类别没有实现任何接口。
实战案例
使用lambda表达式:
List<Integer> numbers = List.of(1, 2, 3, 4, 5); numbers.forEach(n -> System.out.println(n));
使用匿名内部类:
List<Integer> numbers = List.of(1, 2, 3, 4, 5); numbers.forEach(new Consumer<Integer>() { @Override public void accept(Integer n) { System.out.println(n); } });
结论
lambda表达式和匿名内部类都是编写匿名函数的强大工具。lambda表达式更简单易读,而匿名内部类更灵活。您可以访问外部实例方法中的this关键字。根据具体情况,选择最合适的工具很重要。
以上是Java 更多关于lambda表达式与匿名内部类的比较,请关注图灵教育的其他相关文章!