Java新特性(三)-- Lambda表达式

Lambda表达式是JDK1.8推出的重要新特性。

函数式编程和面向对象编程可以理解为两大开发阵营。但是很多人认为传统的面向对象开发结构过于完整,代码量大,所以才诞生了函数式编程这种新的开发方法。

我们先来看看传统面向对象开发方法:

package www.testdemo.lambda;

interface IMessage {
    void print();
}

public class TestLambda {
    public static void main(String[] args) {
        
        //匿名内部类
        IMessage m = new IMessage() {
            @Override
            public void print() {
                System.out.println("IMessage的实现类");
            }
        };
        
        m.print();
    }
}

接口IMessage中的抽象方法必须由子类来覆写;要先创建对象,通过构造方法实例化对象再调用普通方法等等,必须按照完整语法来编写。这就是传统面向对象开发的局限性。

如果采用函数式编程,则代码可以简化成如下形式:

package www.testdemo.lambda;

interface IMessage {
    void print();
}

public class TestLambda {
    public static void main(String[] args) {
    	//函数式编程
        IMessage m = () -> System.out.println("IMessage的实现类");
        m.print();
    }
}
  • 要想使用函数式编程有一个前提:
    接口必须只有一个方法,如果有两个方法,则无法使用函数式编程。如果现在某个接口就是为了函数式编程而生的,最好在定义时就让其只能够定义一个方法,所以就有了函数式接口

① 函数接口为函数式编程而生。

② 只能定义一个抽象方法。

③ 为了防止函数接口中定义多余一个的抽象方法,导致函数接口变成普通接口,在接口定义时使用@FunctionalInterface注解。

④ 使用lambda表达式进行编程。

lambda方法体:

(参数名列表) -> {
	code1
	code2
	[return]
}
	如果方法体本身只包含一行语句,直接写单行语句即可;如果有多行语句,就需要使用{}
	如果方法体中只有一条语句并且作为返回值,可以省略return
	如果方法体中访问外部变量,隐式外部变量final修饰,和内部类相同
	列表中的参数名称不要跟外部代码中的变量名重名
	建议编写完整格式!
package www.testdemo.lambda;

@FunctionalInterface
interface IAdd {
    int add(int a, int b);
}

@FunctionalInterface
interface IMessage {
    void print();
}

public class TestLambda {
    public static void main(String[] args) {

        //方法体只有一行语句且作为返回值,所以不需要{}和return
        IAdd iAddObject = (a, b) -> a+b;
        System.out.println(iAddObject.add(1, 2));
        System.out.println(iAddObject.add(3, 5));

        //方法体只有一行语句可以省略{}
        IMessage m1 = () -> System.out.println("Hello world");
        m1.print();

        //方法体有多行语句的时候不能省略{}
        IMessage m2 = () -> {
            System.out.println("111");
            System.out.println("222");
            System.out.println("333");
        };
        m2.print();
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43508801/article/details/88993213