java8-basic

本文最后更新于:2022年6月1日 晚上

Java 8 最大的变化是引入了函数式编程(functional programming)的概念。具体而言,Java 8 增加了 lambda 表达式(lambda expression)、方法引用(method reference)、和流(stream)。本篇文章主要介绍了 lambda 表达式、方法引用和函数式接口(functional interface)的基本语法,并讨论了接口中的默认方法和静态方法

Java8 基础

lambda 表达式

从匿名内部类到 lambada 表达式

函数式接口是一种包含单一抽象方法(single abstract method)的接口。类实现接口,只需要从写接口中的所有抽象方法即可,这可以通过顶级类(top-level class)、内部类、匿名内部类来实现。

以匿名内部类的方式实现 Runnable 接口

1
2
3
4
5
new Thread(new Runnable() {
public void run() {
System.out.println("inside runnable using anonymous inner class");
}
}).start();

以 lambda 表达式的方式实现 Runnable 接口

1
2
3
new Thread(() -> {
System.out.println("inside runnable using lambda");
}).start();

与匿名内部类相比, lambda 实现 Runnable 接口:

  • 省略了 new 关键字和接口名()以及后面的{}
  • 省略了权限修饰符、返回值类型、方法名
  • 使用 -> 来将参数(由于 run() 方法没有参数仅用小括号代替)和方法体隔开

lambada 表达式的格式

lambda 表达式的标准格式由3部分构成:参数列表、**->方法体**

1
2
3
(参数列表) -> {
方法体
}

lambda 表达式的省略格式

  • 参数列表中的参数类型可以省略
  • 如果参数有且仅有一个,则小括号可以省略
  • 如果方法体中有且仅有一个语句,则可以同时省略大括号、return关键字、语句分号

java.io.FilenameFilter 是一个函数式接口,包含一个单一抽象方法 accept,方法签名如下:

1
boolean accept(File dir, String name);

接口中的静态方法

接口中的静态方法注意点:

  • 静态方法必须有一个实现
  • 无法重写静态方法
  • 通过接口名调用静态方法
  • 无须实现接口以实用静态方法

java8-basic
https://shgang97.github.io/posts/java8-basic-34a9a2a0fd8f/
作者
shgang
发布于
2022年5月26日
更新于
2022年6月1日
许可协议