【读书笔记】《java从小白到大牛》Lambda表达式表达式

quange 2022-5-5 79 5/5

Java 8之后推出的Lambda表达式开启了Java语言支持函数式编程(Functional Programming)新时代。Lambda表达式,也称为闭包(Closure),现在很多语言都支持Lambda表达式,如C++、C#、Swift、Objective-C和JavaScript等。

函数式编程是种编程范式,它将计算机运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调

引自于百度百科

提示 函数式编程与面向对象编程有很大的差别,函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数的参数或返回值,即高阶函数。而面向对象编程是按照真实世界客观事物的自然规律进行分析,客观世界中存在什么样的实体,构建的软件系统就存在什么样的实体。即便Java 8之后提供了对函数式编程的支持,但是Java还是以面向对象为主的语言,函数式编程只是对Java语言的补充

Lambda表达式

Lambda表达式是一个匿名函数(方法)代码块,可以作为表达式、方法参数和方法返回值。

//Lambda表达式标准语法形式如下:
(参数列表) -> {
    //Lambda表达式体
}

//其中,Lambda表达式参数列表与接口中方法参数列表形式一样,Lambda表达式体实现接口方法。

函数式接口

Lambda表达式实现的接口不是普通的接口,称为是函数式接口,这种接口只能有一个方法。如果接口中声明多个抽象方法,那么Lambda表达式会发生编译错误:

为了防止在函数式接口中声明多个抽象方法,Java 8提供了一个声明函数式接口注解@FunctionalInterface

//可计算接口
@FunctionalInterface
public interface Calculable {
    // 计算两个int数值
    int calculateInt(int a, int b);
}

在接口之前使用@FunctionalInterface注解修饰,那么试图增加一个抽象方法时会发生编译错误。但可以添加默认方法和静态方法。

提示Lambda表达式是一个匿名方法代码,Java中的方法必须声明在类或接口中,那么Lambda表达式所实现的匿名方法是在函数式接口中声明的。

Lambda表达式简化形式

  • 省略参数类型
  • 省略参数小括号(Lambda表达式中参数只有一个时,可以省略参数小括号)
  • 省略return和大括号(如果Lambda表达式体中只有一条语句,那么可以省略return和大括号)

方法引用

Java 8之后增加了双冒号“::”运算符,该运算符用于“方法引用”,注意不是调用方法。“方法引用”虽然没有直接使用Lambda表达式,但也与Lambda表达式有关,与函数式接口有关。方法引用分为:静态方法的方法引用和实例方法的方法引用。它们的语法形式如下:

类型名::静态方法        // 静态方法的方法引用
实例名::实例方法        // 实例方法的方法引用

注意 被引用方法的参数列表和返回值类型,必须与函数式接口方法参数列表和方法返回值类型一致。

- THE END -
最后修改:2022年5月5日
0

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的所有下载文件均为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。

共有 0 条评论