Java中无参Lambda表达式需匹配无参数的函数式接口:1.Runnable用于无参无返回值,调用run();2.Supplier用于无参有返回值,调用get();3.可自定义@FunctionalInterface;必须写(),用->而非=>。

Java 中没有严格意义上的“无参 Lambda 表达式”,因为 Lambda 必须匹配函数式接口的抽象方法签名;但你可以定义**参数列表为空**的 Lambda,即对应函数式接口中**无参数、有返回值(或无返回值)**的方法。
1. 用 Runnable 定义无参、无返回值的 Lambda
这是最常见的方式,Runnable 接口只有一个 void run() 方法,天然适配无参动作:
Runnable task = () -> System.out.println("Hello, no args!");
task.run(); // 调用:输出 "Hello, no args!"
注意:不能直接加括号执行(如 task()),必须通过函数式接口定义的方法调用(这里是 run())。
2. 用 Supplier 定义无参、有返回值的 Lambda
当需要返回一个值时,用 Supplier<T>(例如返回字符串、数字等):
立即学习“Java免费学习笔记(深入)”;
Supplier<String> message = () -> "Lambda says hi";String s = message.get(); // 调用 get() 获取返回值
常见返回类型还有 Supplier<Integer>、Supplier<List<?>> 等,只要接口方法无参数、有返回值,就可用 () -> ... 形式。
3. 自定义函数式接口(无参)
若标准接口不满足需求,可自定义带 @FunctionalInterface 的接口:
@FunctionalInterface
interface Action {
String execute();
}
Action greet = () -> "Hi there!";
String result = greet.execute(); // 调用自定义方法名
关键点:接口只能有一个抽象方法,且该方法不能有参数。
4. 常见误区提醒
- 不能写成
() => {...}(Java 用->,不是=>) - 即使无参也**必须保留空括号
()**,不能省略(区别于 JavaScript) - 如果 Lambda 体只有一条语句且为表达式,可省略 return 和花括号;若有多条语句或含 void 方法调用,需用花括号和分号
- 无参 Lambda 本质仍是对象实例,不是独立函数,调用依赖目标接口的方法
核心就是选对函数式接口,写对语法结构,再通过其抽象方法触发执行。不复杂但容易忽略括号和调用方式。


















