Lambda 表达式的基本语法格式如下:
1(参数列表) -> { 方法体 }
它由三部分组成:
(参数列表):对应接口中抽象方法的参数。- 类型通常可以省略(Java 编译器会自动推断)。
- 如果只有一个参数,括号也可以省略。
->:箭头符号,这是 Lambda 的标志,读作“goes to”或“变成”。{ 方法体 }:具体的代码逻辑。- 如果只有一行代码,大括号
{}和return关键字(如果是返回值)通常可以省略。
- 如果只有一行代码,大括号
常见写法示例
假设我们要实现一个数学运算接口 MathOperation,它有一个方法 int operate(int a, int b)。
表格
| 场景 | Lambda 写法 | 说明 |
|---|---|---|
| 标准写法 | (a, b) -> { return a + b; } | 完整形式,有大括号和 return |
| 省略大括号 | (a, b) -> a + b | 只有一行代码时,自动作为返回值 |
| 省略类型 | (int a, int b) -> a + b | 通常不需要写类型,编译器能猜出来 |
| 单参数 | a -> a * a | 只有一个参数时,括号可省略 |
| 无参数 | () -> System.out.println("Hi") | 没有参数,括号不能省 |
底层原理:函数式接口
Lambda 表达式不能凭空存在,它必须依附于一个接口。但这个接口有特殊要求:
必须只有一个抽象方法。
这种接口被称为函数式接口。
- 例子:
Runnable接口(只有run()方法)Comparator接口(主要用compare()方法)Callable接口(只有call()方法)
当你写 (a, b) -> a + b 时,Java 编译器会根据上下文(比如你把它赋值给了 MathOperation 变量),自动把它转换成实现了 MathOperation 接口的对象。
1new Thread(() -> printer.print("A", 0)).start();
new Thread(...):构造函数需要一个Runnable类型的参数。Runnable:这是一个函数式接口,它只有一个方法void run(),且没有参数。() -> ...:():对应run()方法的空参数列表。->:箭头。printer.print("A", 0):这是run()方法的具体实现。
1万+

被折叠的 条评论
为什么被折叠?



