Lambda表达式(二十)

Lambda表达式(二十)

lambda表达式使用的前提:实现的接口是一个函数式接口(即接口中只定义一个抽象方法)

下面我面在推导下lambda表达式的使用过程


现在我们有一个Run接口,接口中定义了一个running方法,如下

interface Run {
    void running(int away);
}

Level 1

第一个阶段,我们使用常用类继承Run接口,重写running方法,最后在main方法中调用,如下:

package com.lambda;

interface Run {
    void running(int away);
}

class Runner implements Run {
    @Override
    public void running(int away) {
        System.out.println("跑了"+away+"米。");
    }
}

public class TestLambda {
    public static void main(String[] args) {
        Run r1 = new Runner();
        r1.running(100);
    }
}

Level 2

第二个阶段,我们将定义的Running类写到Testlambda内部,将其实现为静态内部类,如下:

package com.lambda;

interface Run {
    void running(int away);
}

public class TestLambda {
    static class Runner implements Run {
        @Override
        public void running(int away) {
            System.out.println("跑了"+away+"米。");
        }
    }

    public static void main(String[] args) {
        Run r1 = new Runner();
        r1.running(100);
    }
}

Level 3

第三个阶段,继续简化,省略掉Runner类的名字,直接定义接口中的running方法,实现为匿名内部类,如下:

package com.lambda;

interface Run {
    void running(int away);
}

public class TestLambda {
    public static void main(String[] args) {
        Run r1 = new Run() {
            @Override
            public void running(int away) {
                System.out.println("跑了"+away+"米。");
            }
        };
        r1.running(100);
    }
}

Level 4

在level 3的基础上,进一步简化,lambda表达式就登场了,将匿名内部类的new关键字和方法定义简化如下,只保留方法的参数和实现的方法体。

package com.lambda;

interface Run {
    void running(int away);
}

public class TestLambda {
    public static void main(String[] args) {
        Run r1 = (int away) -> {
                System.out.println("跑了"+away+"米。");
            };
        r1.running(100);
    }
}

现在的代码结构与Level 1相比是不是简洁了很多!其实在这个基础上,还可以再精简一点,如果要执行的代码只有一行,可以将代码块的括号{}去掉,参数只有一个的话,还可以将参数的括号()去掉,最终变成下面的样子:

package com.lambda;

interface Run {
    void running(int away);
}

public class TestLambda {
    public static void main(String[] args) {
        Run r1 = away -> System.out.println("跑了"+away+"米。");
        r1.running(100);
    }
}
posted @ 2021-02-26 10:23  LucaZ  阅读(37)  评论(0编辑  收藏  举报