匿名内部类和Lambda表达式实现有参有返回值抽象方法

本文通过一个具体的示例展示了如何使用Java中的Lambda表达式来简化匿名内部类的使用。介绍了Lambda表达式的语法特点及其实现原理,并通过对比匿名内部类的方式,突出了Lambda表达式的简洁性和易读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口

package Demo4;

public interface Addable {
    int add(int x,int y);
}

测试类

package Demo4;

public class AddableDemo {
    public static void main(String[] args) {
        // 匿名内部类,创建接口对象,重载Addable接口add方法
        // 匿名内部类创建的类型可以是接口,也可以是抽象类,还可以是具体类
        useAddable(new Addable() {
            @Override
            public int add(int x, int y) {
                return x+y;
            }
        });
        // lambda表达式方法也是重载了方法,相比较于匿名内部类更简单清晰
        // 省略了方法名,省略了参数类型,接口名和函数名都一同省掉
        // 如果代码只有一行可再省略省略大括号和分号,
        // 如果有return,return也要省略掉
        useAddable((x,y)->x+y);
        // 为什可以省略因为javac的类型推断机制
        // 编译器能够根据上下文信息推断出参数的类型
    }
    private static void useAddable(Addable a){
        int sum = a.add(10,20);
        System.out.println(sum);
    }
}

注意:

  • 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法

  • 必须有上下文环境,才能推导出Lambda对应的接口

    • 根据局部变量的赋值得知Lambda对应的接口

      Runnable r = () -> System.out.println("Lambda表达式");

    • 根据调用方法的参数得知Lambda对应的接口

      new Thread(() -> System.out.println("Lambda表达式")).start();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值