• Lambda表达式


    体验 lambda表达式

    //        匿名内部类方式
            new Thread (new Runnable(){
                @Override
                public void run() {
                    System.out.println("多线程程序启动了");
                }
            }).start();
    
    //        lambda表达式
            new Thread( 
            	() -> { System.out.println("多线程程序启动了"); }
            ).start();
    
    --------------------------------------------------------------
    
    () -> { System.out.println("多线程程序启动了"); }
    
    // 这里的作用实际上就是代替了这部分:
    
    new Runnable(){
    	@Override
    	public void run() {
    		System.out.println("多线程程序启动了");
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    实际上作用是代替了匿名内部类,只不过是实现某个接口的,没有继承某个类。
    Lambda表达式的使用前提:
    1.有一个接口。
    2.接口中有且仅有一个抽象方法。

    省略

    参数的类型可以省略。
    如果参数只有一个,小括号可以省略。
    如果代码块的语句只有一条,可以省略大括号和语句的分号。如果这一条语句是 return语句,省略的时候,要把return也省略掉。

            useFlyable(
            	s -> { System.out.println(s); }
            );
    //        等价
            useFlyable(
            	s -> System.out.println(s)
            );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意事项

    1.使用Lambda必须要有接口,并且该接口中有且仅有一个抽象方法。
    2.lambda表达式实际上是充当了一个接口的实现类的对象的角色,参数是抽象方法的参数,代码块是抽象方法的方法体。
    在这里插入图片描述
    3.必须有上下文环境,才可以推导出 Lambda 对应的接口

        public static void main(String[] args) {
    
    //        根据局部变量的赋值得知 Lambda 对应的接口
            Runnable r = () -> System.out.println("Lambda表达式");
    //        根据调用方法的参数得知 Lambda 对应的接口
            new Thread(() -> System.out.println("Lambda表达式")).start();
    	//	方法参数必须是一个接口, 不可以是抽象类 或者 具体类。
    	
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    和匿名内部类的区别

    匿名内部类,可以是(实现某个接口,继承某个抽象类 / 具体类)的类的对象。
    Lambda表达式,必须是(实现某个接口)的类的对象。
    接口中的方法不止一个,只能使用 匿名内部类。

  • 相关阅读:
    文本匹配——【ICLR 2022】Trans-Encoder
    sql注入学习笔记
    「基础知识」带你深度剖析路由器和交换机!
    leetcodeTop100 动态规划相关(爬楼梯,杨辉三角,打家劫舍)
    计算机毕业设计(附源码)python制造型企业仓储管理系统
    18. 深度学习 - 从零理解神经网络
    文件服务器管理服务器怎么设置
    java8 新特性 -Optional的常见用法
    设计模式-设计原则
    【数据库专题】一文搞懂数据库分库分表的原理
  • 原文地址:https://blog.csdn.net/qq_53318060/article/details/125469137