当前位置: 首页 > 图灵资讯 > 技术篇> Java lambda表达式与匿名内部类的比较

Java lambda表达式与匿名内部类的比较

来源:图灵教育
时间:2024-09-18 15:04:45

与匿名内部类相比,lambda表达式更简单,编译器可以推断类型,但不能访问外部实例方法中的this关键字;匿名内部类更灵活,可以访问this关键字,但语法更复杂。

Java lambda表达式与匿名内部类的比较

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表达式与匿名内部类的比较,请关注图灵教育的其他相关文章!