java Lambda

Lambda的主要作用是替代匿名内部类,更为简洁。

Lambda表达式的目标类型必须是函数式接口,函数式接口就是只包含一个抽象方法的接口(该接口可以包含多个默认方法、类方法)。

Lambda表达式只能为函数式接口创建对象,Lambda表达式只能实现一个方法,故其所实现的接口只能有一个抽象方法。

 

匿名内部类的实现方式如下:

public class Test {

    public static void main(String args[])  {

        // 匿名内部类实现Computation接口
        Computation adder = new Computation(){

            // 实现add()方法
            public int add(int a, int b) {
                return a+b;
            }
        };

        System.out.println(adder.add(5, 6));

    }
}

interface Computation {

    public abstract int add(int a, int b);
}

 

Lambda表达式的实现方法如下:

public class Test {

    public static void main(String args[])  {// Lambda表达式实现Computation接口
        Computation adder = (a,b) -> a+b;

        System.out.println(adder.add(5, 6));

    }
}

interface Computation {

    public abstract int add(int a, int b);
}

Lambda表达式由三部分组成,以Computation adder = (a,b) -> a+b; 为例

形参列表。如上述中的(a,b),允许省略形参类型。

箭头 ->。

代码块,如上a+b。   若代码块只有一句可以省略花括号{}, 只有一条return语句,也可以省略return。

                                  Computation adder = (a,b) -> a+b;等价于Computation adder = (int a, int b) -> {return (a+b);};

 

 

Lambda表达式与匿名内部类的主要区别如下:

匿名内部类可以为任意接口创建实例,不管改接口包含多少抽象方法,而Lambda表达式只能为函数式接口(只包含一个抽象方法)创建实例。

匿名内部类可以抽象类普通类创建实例。

匿名内部类实现抽象方法的方法体允许调用接口中的默认方法;Lambda表达式的代码块不允许。

 

posted on 2018-02-01 21:22  Deltadeblog  阅读(143)  评论(0编辑  收藏  举报

导航