• Lambda表达式


    概念:

    带有参数变量的表达式称为lambda表达式

    基本语法:

    参数列表 —>表达式;

    一、参数列表

    ​ 1、如果没有参数,直接用()来表示,()不能省去

    ​ 2、如果只有一个参数,并且参数写了类型,参数外面一定要加()

    ​ 3、如果只有一个参数并且参数不写类型,那么参数外面不用写()

    ​ 4、如果有两个或多个参数,不管是否写参数类型,都要加();

    ​ 5、如果参数要加修饰符或者标签,参数一定要加上完整的类型;

    二、表达式:

    ​ 1、如果表达式只有一行,那么可以直接写(不需要 { } )

    ​ 2、如果表达式有多行,需要用{}变成代码块

    ​ 3、如果表达式是代码块,并且方法需要返回值,那么在代码块中就必须返回一个返回值

    ​ 4、如果只有单行的情况,并且方法需要返回值,不能有return,编译器会自定帮我们推导return

    Lambda表达式中的变量

    1、参数:

    2、局部变量

    3、自由变量(不是参数也不是局部变量)

    结论:lambda表达式中的自由变量会被保存,无论十分时候执行lambda表达式,都可以直接使用;

    1、自由变量在lambda表达式中是不能修改(final)(操作自由变量的代码块儿,称为闭包)

    2、参数和局部变量的使用方式和普通的变量使用方式相同;

    3、lambda表达式中的this指向,创建lambda表达式的方法中的this

    函数式接口:

    1、我们能够写lambda表达式的地方是一个接口,且接口里面只有一个抽象方法

    2、在Java中,把只有一个抽象方法的接口称为函数式接口,如果一个接口是函数式接口,我们可以在接口上面添加@FunctionalInterface表明这是一个函数式接口(优点:1、检查,2、文档)

    3、无论是否标示@FunctionalInterface,只要满足函数式接口的接口,java都会直接识别函数式接口

    4、简化函数式接口的使用时Java中提供lambda表示式唯一的作用

    5、可以用接口直接来引用一个lambda表达式

    6、函数式接口里面可以写Object对象中的方法

    7、lambda表达式中的异常处理:

    ​ 1、lambda表达式中的异常,要么直接在代码块儿中处理,要么接口中的方法声明抛出

    方法引用

    类 ::静态方法

    对象 ::方法

    对象 ::静态方法

    函数式接口:

    package cn.blogsx.lambda.test;
    
    @FunctionalInterface
    public interface Cook {
        public void makeFood(); //有且仅有一个抽象方法才是函数式接口
    }
    

    使用:

    package cn.blogsx.lambda.test;
    
    public class Demo01Test {
        public static void main(String[] args) {
            invokeCook(() -> System.out.println("正在做饭..."));
        }
        public static void invokeCook(Cook cook){
            cook.makeFood();
        }
    }
    
  • 相关阅读:
    github分支规范
    前端工程师为什么要学习编译原理?
    现代编译原理——第六章:中间树 IR Tree 含源码
    现代编译原理——第五章:活动记录
    现代编译原理——第四章:语义分析以及源码
    现代编译原理——第三章:抽象语法树以及源码
    现代编译原理——第二章:语法分析之LL(K)
    现代编译原理——第1章:词法分析
    现代编译原理——第0章
    优雅的数组降维——Javascript中apply方法的妙用
  • 原文地址:https://www.cnblogs.com/sxblog/p/12286713.html
Copyright © 2020-2023  润新知