2020-07-16Lambda

作者: 智障猿 | 来源:发表于2020-07-17 07:47 被阅读0次

    Lambda

    • Lambda格式
      ①格式:(形式参数)->{代码块}
      ②形式参数:如果有多个形式参数,参数之间用逗号隔开;如果没有参数,留空即可
      ③->:由英文中画线和大于符号组成
      ④代码块:是我们具体要做的事情,也就是以前我们写的方法体的内容
    • 注意事项
      ①使用Lambda必须有接口,并且要求接口中有且仅有一个抽象方法。
      ②必须有上下文环境,才能推导出Lambda对应的接口(根据局部变量的赋值得知Lambda对应的接口:Runnabler r = ()->Syetem.out.println("Lambda表达式"))(根据调用方法的参数得知Lambda对应的接口:new Thread(()->Syetem.out.println("Lambda表达式")).start())
    • 省略模式
      ①参数类型可以省略,但是有多个参数的情况下,不能只省略一个。
      ②如果参数有且只有一个,那么小括号可以省略。
      ③如果代码块的语句只有一条,可以省略大括号和分号,甚至是return
    • 使用场景
    //接口
    public interface lambdaTest {
        void test(String str);
    }
    public class Demo {
        public static void main(String[] args) {
            //方式一匿名内部类
            test(new lambdaTest() {
                @Override
                public void test(String str) {
                    System.out.println(str);
                }
            });
            //方式二lambda
            test((String s)->{
                System.out.println(s);
            });
    
        }
        public static void test(lambdaTest lt){
            lt.test("这是lambda测试");
        }
    }
    
    public interface lambdaTest {
        void test(String str);
    }
    
    public class Demo {
        public static void main(String[] args) {
          lambdaTest lt = (String s)-> System.out.println(s);
          lt.test("hello");
        }
    }
    
    • Lambda表达式与匿名内部类的区别
    1. 所需类型不同
      ①匿名内部类:可以是接口,也可以是抽象类,还可以是具体类。
      ②Lambda表达式:必须是接口
    2. 使用限制不同
      ①如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
      ②如果接口中多于一个抽象方法,智能使用匿名内部类
    3. 实现原理不同
      ①匿名内部类:编译后,产生一个单独的.class字节码文件
      ②Lambda表达式:编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行时动态生成。

    相关文章

      网友评论

        本文标题:2020-07-16Lambda

        本文链接:https://www.haomeiwen.com/subject/dxomhktx.html