美文网首页
java8 Lambda 表达式

java8 Lambda 表达式

作者: 剩下的只有自己 | 来源:发表于2016-09-14 15:07 被阅读17次

    函数式接口

    函数式接口是指接口中只有一个需要实现的方法
    例如Runnable接口:

    public interface Runnable {
    
        /**
         * Starts executing the active part of the class' code. This method is
         * called when a thread is started that has been created with a class which
         * implements {@code Runnable}.
         */
        public void run();
    }
    

    Lambda 表达式

    基本格式: (形式参数) ->{方法体}
    如果要创建上面的Runnable实例,我们以前的写法是:

    Runnable r = new Runnable(){
        public void run(){
          System.out.println("线程开始");  
        }
    }
    

    使用Lambda写法:

    Runnable r = () -> { System.out.println("线程开始");  }
    

    从上面可以看出,可以使用 Lambda 表达式创建一个 Runnable 对象。

    作用:对于一个函数式接口,使用Lambda表达式可创建该接口的对象。
    问题来了,为什么使用Lambda格式也能创建一个对象呢?
    因为Lambda作用的对象是函数式接口,而函数式接口中只定义了一个抽象方法,所以创建该对象只需实现该方法即可,要实现的方法也就可以唯一确定下来,我们只需传入该方法所需的参数以及实现,系统就能自动为我们创建该接口对象了。

    形式参数格式

    • 形式参数可已有0个或多个,使用圆括号包裹,如果有多个使用逗号隔开 (arg1 , arg2 , arg3 ...)
    • 形式参数可以声明类型,也可不声明 。例如:(String arg1 , String arg2 ...) 等价于 (arg1 , arg2 ...)
    • 如果只有一个参数,可省略 圆括号。例如:(arg1) ->{ } 等价于 arg1 ->{ }

    方法体格式

    • 方法体是包含在一对花括号里面
    • 如果方法体只有一句,花括号可省略。例如 :
    Runnable r = () -> { System.out.println("线程开始");  }
    Runnable r = () ->  System.out.println("线程开始");  
    
    • 如果该方法有返回值,在方法体需要返回对应的返回值。

    自定义函数式接口

    public interface MyInterface {
        public void getId(int id); //该接口中只有一个需要实现的方法
    }
    //使用Lambda创建该接口的对象
    MyInterface interface = (id) ->{ System.out.println("id:"+id) }
    

    在Android Studio 中配置使用Lambda表达式

    1. 搭建环境

    版本:Android Studio 2.1 + jdk 1.8
    查看当前使用的版本:点击 **Help -> About **


    出现如下界面:


    如需升级Android Studio,参考:http://www.jianshu.com/p/465b0234142b

    2. 配置Gradle文件

    如果环境搭建好,下面通过配置你app模块下的gradle文件:

    android{
      ...
      defaultConfig{
        ...
        jackOptions{    
          enabled true
        }
        ...
      }
      compileOptions{    
        sourceCompatibility JavaVersion.VERSION_1_8    
        targetCompatibility JavaVersion.VERSION_1_8
      }
      ...
    }
    

    相关文章

      网友评论

          本文标题:java8 Lambda 表达式

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