Java8之Lambda表达式

        Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性;使用 Lambda 表达式可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java 的语言表达能力得到了提升。

演变过程:

        外部类–>静态内部类–>局部内部类–>匿名内部类–>lambda表达式

外部类:

public class CallTest{
    public static void main(String[] args) {
        new My().myMethod();
    }
}
// 函数式接口
interface MyBase{
    public void myMethod();
}
// 外部类
class My implements MyBase{

    @Override
    public void myMethod() {
        System.out.println("成功!");
    }
}

静态内部类:

public class CallTest{
    // 静态内部类
    static class My implements MyBase{
        @Override
        public void myMethod() {
            System.out.println("成功");
        }
    }

    public static void main(String[] args) {
        new My().myMethod();
    }
}
// 函数式接口
interface MyBase{
    public void myMethod();
}

局部内部类:

public class CallTest{

    public static void main(String[] args) {
        // 局部内部类
        class My implements MyBase{
            @Override
            public void myMethod() {
                System.out.println("成功");
            }
        }
        // 调用方法
        new My().myMethod();
    }
}
// 函数式接口
interface MyBase{
    public void myMethod();
}

匿名内部类:

public class CallTest{

    public static void main(String[] args) {
        // 匿名内部类
        new MyBase(){
            @Override
            public void myMethod() {
                System.out.println("成功");
            }
        }.myMethod();
    }
}
// 函数式接口
interface MyBase{
    public void myMethod();
}

lambda表达式:

public class CallTest{

    public static void main(String[] args) {
        // lambda表达式
        MyBase base = () -> System.out.println("成功");
        base.myMethod();
        //  ((MyBase)() -> System.out.println("成功")).myMethod();
    }
}
// 函数式接口
interface MyBase{
    public void myMethod();
}

语法

        Lambda表达式在Java语言中引入了一个新的语法元素和操作符。这个操作符为“->”,该操作符被称为Lambda操作符或剪刀操作符

(parameters) -> expression

(parameters) -> { statements; }

        paramaters:类似于方法的形参列表,这里指的是函数式接口中抽象方法的参数。参数的类型即可以声明也可以省略,如果只有一个参数,括号也可以省略

        ->:类似于 JavaScript 中的箭头函数 

        方法体:函数式接口中抽象方法的实现。如果方法体只有一个语句,大括号是可以省略

无参

// 单行
Runnable runnable = ()-> System.out.println("1");
// 多行
Runnable runnable1 = ()-> {
    System.out.println("1");
    System.out.println("2");
};

有参

// 单行
Test test1 = (a,b)-> System.out.println(a);
// 多行
Test test2 = (a,b)-> {
    System.out.println(a);
    System.out.println(b);
};

Lambda 表达式中无需指定类型,程序依然可以编译,这是因为javac根据程序的上下文,在后台推断出了参数的类型

你可能感兴趣的:(java,开发语言)