java8-lambda

1. lambda解决的问题:

  • java不能函数式编程
  • java匿名内部类只能单线程运行
  • 匿名内部类缺陷:
    1. 语法复杂
    2. this容易混淆
    3. 不能引用外部变量
    4. 不能抽象化来控制流程

2. Lambda实现匿名内部类

  • 在lambda中,可以使用方法内部变量 ,但是不能改变它的值(i++报错)
package com.fantJ.JAVA_8;

/**
 * Created by Fant.J.
 * 2017/12/12 20:58
 */
public class Lambda_Runnable {
    public static void main(String[] args) {
        new Runnable(){
            @Override
            public void run(){
                System.out.println("匿名内部类实现Runnable接口");
            }
        }.run();


        int i = 1;
        Runnable r=()->{
            System.out.println("lambda实现Runnable接口");
            System.out.println("i="+i); //测试是否可以使用方法内部变量  (匿名内部类只可以使用常量)
            //i++;   //报错
        };
        r.run();
    }
}
image.png

3. Lambda实现自定义接口

package com.fantJ.JAVA_8;

/**
 * Created by Fant.J.
 * 2017/12/12 21:11
 */
public class Lambda_Interface {
    public static void main(String[] args) {
        new Message() {

            @Override
            public void message(String msg) {
                System.out.println(msg);   //打印传参 msg
            }
        }.message("用匿名内部类调用自定义的接口");

        Message m = (String msg) -> {
            System.out.println(msg);
        };
        m.message("lambda 调用自定义接口");
    }

    static interface Message {
        void message(String msg);
    }
}
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • lambda表达式(又被成为“闭包”或“匿名方法”)方法引用和构造方法引用扩展的目标类型和类型推导接口中的默认方法...
    183207efd207阅读 1,504评论 0 5
  • 为了支持函数式编程,Java 8引入了Lambda表达式.在Java 8中采用的是内部类来实现Lambda表达式....
    光剑书架上的书阅读 995评论 2 10
  • 你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里 转载请注明出处 h...
    WWWWDotPNG阅读 4,942评论 2 15
  • 她轻轻推动手指 却让我冲破了——那曾经无法跨越的阻碍 我还说不清那是什么——它朦胧还美丽 但是我感受到了——更茁壮...
    艾绒阅读 176评论 0 0
  • 1、主题是什么? 女友是填洞的需要 2、事件是什么? 今天在助教群里,谈到夫妻关系时,回想起来我毕业后恋的女朋友,...
    Mike回到自己阅读 161评论 0 1