• 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表达式,必须是(实现某个接口)的类的对象。
    接口中的方法不止一个,只能使用 匿名内部类。

  • 相关阅读:
    C语言面试题 - 结构体对齐
    Mybatis 在 insert 插入操作后返回主键 id
    QT学习日记28——QT动态库制作和使用
    vue中的计算属性和监听属性
    052-第三代软件开发-系统监测
    自己用 ai 写了个链接 mysql 数据库的 mcp 工具
    计算机毕业设计ssm“逢遇”个人博客平台qaoxv系统+程序+源码+lw+远程部署
    纺织ERP系统哪家的比较好?适用的纺织ERP软件有哪些
    NSS [HUBUCTF 2022 新生赛]checkin
    Camera2相机拍照流程之预览功能梳理
  • 原文地址:https://blog.csdn.net/qq_53318060/article/details/125469137