zoukankan      html  css  js  c++  java
  • 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;//编译会报错
        }
  • 相关阅读:
    Java面试——从JVM角度比较equals和==的区别
    Java线程和多线程(三)——线程安全和同步
    玩转Android之MVVM开发模式实战,炫酷的DataBinding!
    写点什么好呢2? 钱、事业、婚姻、人生意义
    写点什么好呢2? 钱、事业、婚姻、人生意义
    大型网站架构技术一览
    【树莓派】GSM900模块
    【Latex】数学公式排版
    【MYSQL】导入中文后乱码问题
    【R】shiny界面
  • 原文地址:https://www.cnblogs.com/yxj808/p/14958631.html
Copyright © 2011-2022 走看看