() -> {} 是 lambda 表达式最基础写法,表示无参数、无返回值的函数逻辑,用于实现有且仅一个抽象方法的函数式接口(如 runnable),需匹配接口方法签名,括号不可省,单语句可省大括号。

Java 中的 () -> {} 是 Lambda 表达式的最基础写法,表示一个**无参数、无返回值**的函数逻辑。它不是独立运行的代码,而是用来实现**只有一个抽象方法的接口(即函数式接口)**,比如 Runnable、Supplier 或自定义接口。
必须匹配函数式接口
Lambda 表达式本质是匿名实现类的简化写法,所以它只能用于实现函数式接口——也就是接口里**有且仅有一个未被 default 或 static 修饰的抽象方法**。
- 接口上加
@FunctionalInterface注解可强制校验(非必需但推荐) - 例如
Runnable只有void run()一个抽象方法,所以() -> System.out.println("ok")能直接赋给Runnable变量 - 如果接口有两个抽象方法,编译器会报错:“not a functional interface”
常见使用场景和写法
实际开发中,() -> {} 主要用于启动线程、延迟执行、事件回调等不需要输入、也不关心返回的场景。
-
启动线程:
new Thread(() -> System.out.println("后台任务")).start(); -
定时任务:
timer.schedule(new TimerTask() { public void run() { ... } }, 1000);→ 可简化为timer.schedule(() -> doSomething(), 1000);(需封装适配) -
GUI事件响应:
button.addActionListener(e -> System.out.println("点击了")); // 这里 e 是参数,不属于 () -> {} 形式;真正用() -> {}的是像SwingUtilities.invokeLater(() -> updateUI());
括号和大括号的省略规则
() -> {} 中的符号不是固定不变的,Java 编译器允许根据上下文做合理省略:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 小括号
()不能省——无参时必须保留,否则语法错误 - 大括号
{}和分号可省,当且仅当方法体只有一条语句,且无返回值:() -> System.out.println("hello")合法,等价于() -> { System.out.println("hello"); } - 如果有返回值或多个语句,必须用大括号 +
return(若需返回):() -> { doA(); return getResult(); }
自己定义函数式接口来用
除了 JDK 内置接口,你也可以定义自己的轻量行为接口:
例如:@FunctionalInterface<br>interface Action { void execute(); }<br><br>Action log = () -> System.err.println("日志输出");<br>log.execute(); // 输出:日志输出
只要接口满足“唯一抽象方法”,就可以用 () -> {} 赋值,无需额外类或匿名内部类。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










