• java8新特性-lambda表达式


    关于lambda表示式,它的本质就是匿名内部类一种。

    复习一下匿名内部类

    使用场景:当类或接口类型作为参数传递时,可以直接使用匿名内部类方式创建对应的对象

    匿名内部类的嵌套使用

    参考这篇:https://blog.csdn.net/u013771764/article/details/82937903

    使用Lambda表达式简化匿名内部类的书写,但Lambda表达式并不能取代所有的匿名内部类,只能用来取代函数接口(Functional Interface)的简写。

    能够使用Lambda的依据是必须有相应的函数接口(函数接口,是指内部只有一个抽象方法的接口)。

    @FunctionalInterface 检查是否是函数式接口

    lambda表达式省略了接口名和函数名

    public class Test {
    
        interface  Fun{
              void say();//接口中的抽象方法abstract 可以省略
    
        }
        public static void main(String[] args) {
            Test test = new Test();
            test.play();
    //lambda表达式 Fun fun
    = () -> System.out.println("3"); fun.say(); } public void play(){ //匿名内部类 Fun f=new Fun(){ @Override public void say() { System.out.println("f"); } }; f.say(); } }

    上面是无参函数简写,如果是有参函数:

    (参数列表)->{return 返回值}  

    可以省略参数列表的类型 编译器可以统一识别参数值。

    public class Test {
    
        interface  Fun{
              void say(int x,int y);//接口中的抽象方法abstract 可以省略
    
        }
        public static void main(String[] args) {
            Fun fun = (x,y) -> {
                x=x+y;
                y=2*x;
                System.out.println("x="+x+",y="+y);};
            fun.say(3,4);
        }
    
    }

    lambda中可以使用成员变量,局部变量,但是使用过局部变量以后,该局部变量就必须为final,所以不能再修改了。

    (1)不需要声明参数类型,编译器可以统一识别参数值。
    (2)一个参数无需定义圆括号,但多个参数需要定义圆括号。
    (3)lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改
    (4)在lambda表达式不允许声明与全局变量相同的局部变量、参数

        public static void main(String[] args) {
            Test test = new Test();
            test.play();
            int a=3;
            Fun fun2 = () -> System.out.println(a+5);
            fun2.say();
            a=5;//编译会报错
        }
  • 相关阅读:
    一个小案例精通lamda表达式
    你想被开除吗?来看看程序员【离职小技巧】吧
    让 Flutter 在鸿蒙系统上跑起来
    “TensorFlow 开发者出道计划”全攻略,玩转社区看这里!
    环形单链表的增删改查、约瑟夫环两种解法
    一万字详解 Redis Cluster Gossip 协议
    Lambda表达式
    Linux系统中如何进入退出vim编辑器,方法及区别
    成为博客主的第一天
    【秋招内推】近期互联网公司秋招内推合集
  • 原文地址:https://www.cnblogs.com/yxj808/p/14958631.html
Copyright © 2020-2023  润新知