Java接口定义行为契约,只声明方法签名与常量,支持多实现与解耦;命名需体现业务意图,配合OpenAPI/Protobuf等契约工程落地规范;面向接口编程,依赖注入替代new,default方法慎用于演进。

Java 通过接口定义统一标准和规范,核心是把“能做什么”明确写下来,让所有实现者照着做,调用方只认这个约定,不关心谁在干、怎么干。
用接口声明行为契约,不带实现也不存状态
接口只写方法签名,比如 void send(String content),不写具体逻辑,也不放实例变量。这样微信通知、短信通知、邮件通知可以各自实现同一个 Notifier 接口,彼此互不影响。新增一种通知方式,只要实现这个接口就行,不用改已有代码。
- 方法默认 public abstract,不用显式写修饰符
- 字段只能是 public static final 常量,不能用来存运行时数据
- 避免在接口里塞 Optional 返回值,会模糊语义,影响调用方判断
命名和结构体现业务意图,方便协作理解
接口名不是 UserInterface 这类泛称,而是像 UserQueryService 或 OrderPaymentProcessor,一看就知道它负责什么。包路径也要带业务和版本信息,比如 com.example.order.api.v1,说明这是订单服务 v1 的对外契约。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 方法名用动词开头:selectUserById、createOrder、cancelPayment
- DTO、接口、错误码枚举统一放在 .api 或 .contract 包下,不混入实现类或配置
- 避免 getUserByIdAndStatus 这种拼凑型方法名,职责要单一
配合契约工程实践,让规范真正落地
接口只是载体,真要管住规范,得靠配套机制。比如用 OpenAPI YAML 先定义好请求参数、响应结构、错误码,再生成 Java 接口和 DTO 类,保证文档和代码一致;或者用 Protobuf 定义 gRPC 接口,天然支持多语言和向后兼容。
- Controller 层用 @RequestMapping 显式声明路径,网关和注册中心才能自动识别服务
- 加 @Api(tags = "User") 和 x-service-id 扩展字段,让协作方快速定位归属服务
- 版本控制建议走路径方式(如 /api/v1/users),调试直观、路由清晰
面向接口编程,解耦调用与实现
业务代码里别写 new XXXImpl(),而是依赖接口类型,比如 List
- 集合、参数、返回值都用接口类型,不是实现类
- 一个类可实现多个接口,弥补单继承限制,灵活组合能力
- default 方法可用于接口演进,但不能访问实现细节;需要共享状态或逻辑,该用抽象类就用抽象类
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










