回调:Lambda表达式

这篇博客探讨了Java中接口与匿名内部类的关系,以及如何使用Lambda表达式简化代码。作者通过示例展示了如何避免创建额外的类来实现接口,而是直接在方法调用中提供实现。Lambda表达式的使用使得代码更加简洁,提高了代码的可读性和效率。
摘要由CSDN通过智能技术生成

        思考一个问题:能否new一个接口?

        不可以。如果我们new了一个接口的对象,然后调用方法,因为方法没有定义,所以对象就不知道要干什么了,所以说问题出在没有方法体上!

        那是不是我在new接口的时候,提供方法体就可以了?

        这是对的,我们在new接口的时候只需要提供重写的方法就可以了。

       接回调思想的内容,这种写法有一个缺陷:我为了实现一个方法,必须要搞一个类,代码如下:

interface Beauty {
    void makeBeauty();
}
class HairWasher{
    void hair(Beauty beauty){
        System.out.println("洗完了");
        beauty.makeBeauty();
    }
}

class HairTeacher implements Beauty {
    @Override
    public void makeBeauty() {
        System.out.println("做头发");
    }
}

public class Entrance1 {
    public static void main(String[] args) {

        HairWasher hw=new HairWasher();
        hw.hair(new HairTeacher());

    }
}

       接口Beauty只有一个方法,我们把Beauty的子类传给hair方法时hair方法内部也仅仅是调用了子类对应beauty的方法,所以我们想:我直接提供一个方法可以不?

       等价代码如下:

interface Beauty {
    void makeBeauty();
}

class HairWasher{
    void hair(Beauty beauty){
        beauty.makeBeauty();
    }
}

public class Entrance2 {
    public static void main(String[] args) {
        HairWasher hw=new HairWasher();
        hw.hair(new Beauty() {
            @Override
            public void makeBeauty() {
                System.out.println("做头发");
            }
        });
    }
}

       简化写法:(参数列表)->{方法体}

public class Entrance2 {
    public static void main(String[] args) {
        HairWasher hw=new HairWasher();
        hw.hair(()-> {
                System.out.println("做头发");
        });
    }
}

       如果方法体只有一行,那么甚至可以省略花括号

public class Entrance2 {
    public static void main(String[] args) {
        HairWasher hw=new HairWasher();
        hw.hair(()-> System.out.println("做头发"));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值