空方法应抛出 UnsupportedOperationException 并配标准 javadoc 注释,非 void 方法需补占位返回值;接口中预留方法优先删除,否则用 @deprecated 标明用途;CI 工具需拦截无注释、无异常、无返回值的空方法。

Java里空方法怎么写才不算偷懒
空方法不是随便写个 {} 就完事。IDE会警告、同事会皱眉、后续维护时容易误以为“这方法还没写”,其实它本意是“暂时不实现,但签名已定”。关键在传递明确意图:这是占位,不是遗漏。
- 永远用
throw new UnsupportedOperationException("TODO");替代空花括号——它让调用立刻失败,避免静默错误蔓延 - 如果方法返回值不是
void,必须补上占位返回值(比如return null;或return 0;),否则编译不过 - 别用
return;混淆void和非void方法的语义,IDE可能不报错但逻辑已埋雷
TODO注释该写在哪、写多细
TODO 不是写给未来的自己看的备忘录,而是写给下一个接手的人看的契约。放在方法内部或 javadoc 里效果完全不同。
- 注释必须紧贴方法声明上方,用标准 javadoc 格式:
/** TODO: 实现订单超时自动取消逻辑,依赖定时任务模块 v2.3+ */
- 禁止只写
// TODO或// TODO: xxx这种行内注释——它会被忽略、难检索、没上下文 - 必须包含具体依赖项(如“需等
PaymentService.verify()稳定后接入”)或约束条件(如“仅支持 POST /v1/refund 接口”),否则等于没写
接口中定义空方法存根的特殊处理
接口不能有方法体,所以 UnsupportedOperationException 不适用。这时候空方法只能出现在实现类里,但接口设计阶段就得想清楚。
- 如果某个方法在当前版本纯属预留,优先考虑删掉——接口膨胀比临时空方法更伤人
- 真要保留,就在接口 javadoc 明确标注:
/** @deprecated This method is reserved for future refund policy engine integration */
- 实现类中对应方法仍需抛出
UnsupportedOperationException,且注释同步更新,保持两端一致
CI/静态检查怎么拦住乱写的空方法
靠人盯不现实,得让工具说话。空方法本身合法,但没注释、没异常、没返回值的组合就是危险信号。
立即学习“Java免费学习笔记(深入)”;
- 在 SonarQube 或 SpotBugs 中启用
MethodWithNoBody规则,并把阈值设为“warn on missing@throws UnsupportedOperationException” - Git hooks 可扫描新增代码中是否含
{}后紧跟TODO行——这种模式大概率是半成品,直接阻断提交 - 注意:Lombok 的
@Getter/@Setter生成的方法不算空方法存根,检查规则要排除它们,否则天天误报
最麻烦的不是写空方法,而是过三个月回来看,分不清那是“忘了写”,还是“写了但被注释掉了”,或是“写了但被 if(false) 包住了”。所以空方法必须带可执行的失败路径 + 可检索的上下文注释,少一个都不算完成。










