JDK1.8之Lambda表达式

Lambda用于解决简化new匿名内部类的问题

不使用Lambda的做法

复制代码
//定义一个接口Sport
public interface Sport {
    void run();          //run方法
}

public class Test01 {

    public static void main(String[] args) {

        Sport sport = new Test01().new Person(); //创建Person内部类对象
        //两种调用方法
        go(sport);
        sport.run();
        System.out.println("---------------------------------------");

    }

    public static void go(Sport sport){
        sport.run();
    }
    
    //Test01 的内部类Person  实现了Sport接口
    class Person implements Sport{

        @Override
        public void run() {
            System.out.println("you need running");
        }
    }
}
复制代码

匿名内部类简化

复制代码
//匿名内部类
Sport sport1 = new Sport() {
    @Override
    public void run() {
        System.out.println("Keep exercise everyday!");
    }
};
go(sport1);

public static void go(Sport sport){
    sport.run();
}
复制代码

使用Lambda表达式简化操作

复制代码
//lambda表达式,把一个方法,直接赋值给一个对象.并省去 public void修饰和方法名
Sport exercise = () -> {
    System.out.println("go to exercise");
};
go(exercise);


//简化
go(()->{
    System.out.println("Do yoga!");
});
复制代码

注:

  1. 方法如果形式参数是一个接口类型,则实参必须实现了该接口的实现类的对象. 调用的时候,不管怎么写.say(必须是实现了该接口的实现类的对象)

  2.lambda表达式本质上就是匿名内部类对象.

练习

复制代码
//接口
public interface Sleep {
    void goSleep(String name);
}

//带参数
 sleep((String name)->{
     System.out.println( name + " go to sleep!!");
 },"Joshua");


sleep((name)->{
    System.out.println(name + " is going to sleep");
},"Sophia");

//最终简化版
sleep(name -> System.out.println(name + " don't want to sleep"),"Bob");

//不带参数
sleep(System.out::println,"Kite");

//方法
public static void sleep(Sleep sleep,String name){
    sleep.goSleep(name);
}
复制代码

 

posted @   Joshua_BlueSky  阅读(29)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示