Lambda表达式

246 阅读2分钟

在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做

面向对象的思想:

​   做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情.

函数式编程思想:

​   只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程

冗余的Runnable代码

传统写法

当需要启动一个线程去完成任务时,通常会通过java.lang.Runnable接口来定义任务内容,并使用java.lang.Thread类来启动该线程。代码如下:


public class Demo01Runnable {

    public static void main(String[] args) {

        // 匿名内部类

        Runnable task = new Runnable() {

            @Override

            public void run() { // 覆盖重写抽象方法

                System.out.println("多线程任务执行!");

            }

        };

        new Thread(task).start(); // 启动线程

    }

}

本着“一切皆对象”的思想,这种做法是无可厚非的:首先创建一个Runnable接口的匿名内部类对象来指定任务内容,再将其交给一个线程来启动。

代码分析

对于Runnable的匿名内部类用法,可以分析出几点内容:

Thread类需要Runnable接口作为参数,其中的抽象run方法是用来指定线程任务内容的核心;

- 为了指定run的方法体,不得不需要Runnable接口的实现类;

- 为了省去定义一个RunnableImpl实现类的麻烦,不得不使用匿名内部类;

- 必须覆盖重写抽象run方法,所以方法名称、方法参数、方法返回值不得不再写一遍,且不能写错;

- 而实际上,似乎只有方法体才是关键所在



作者:fakerXuan
链接:www.jianshu.com/p/db367fc41… 来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。