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
Supplier<string> message = () -> "Lambda says hi";</string>String s = message.get(); // 调用 get() 获取返回值
常见返回类型还有 Supplier<integer></integer>、Supplier<list>></list> 等,只要接口方法无参数、有返回值,就可用 () -> ... 形式。
3. 自定义函数式接口(无参)
若标准接口不满足需求,可自定义带 @FunctionalInterface 的接口:
@FunctionalInterface
interface Action {
String execute();
}
Action greet = () -> "Hi there!";
String result = greet.execute(); // 调用自定义方法名
关键点:接口只能有一个抽象方法,且该方法不能有参数。
4. 常见误区提醒
- 不能写成
() => {...}(Java 用->,不是=>) - 即使无参也**必须保留空括号
()**,不能省略(区别于 JavaScript) - 如果 Lambda 体只有一条语句且为表达式,可省略 return 和花括号;若有多条语句或含 void 方法调用,需用花括号和分号
- 无参 Lambda 本质仍是对象实例,不是独立函数,调用依赖目标接口的方法
核心就是选对函数式接口,写对语法结构,再通过其抽象方法触发执行。不复杂但容易忽略括号和调用方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











