# Alibaba Java Coding Guidelines 摘要

## 1. 文档定位

本文记录后端 Java 代码生成和人工开发时需要默认遵守的 Alibaba Java Coding Guidelines 摘要。

本文是可跨项目复用的工程规范，不替代项目自身的后端分层、业务边界、安全规范和接口契约要求。实际编码时优先级为：

1. 当前项目 `AGENTS.md`
2. 当前项目后端开发规范
3. 本文 Java 代码规范摘要
4. Spring Boot / Java 社区通用习惯

## 2. 命名规范

- 类名使用 `UpperCamelCase`。
- 方法名、参数名、局部变量名和成员变量名使用 `lowerCamelCase`。
- 常量使用 `UPPER_SNAKE_CASE`。
- 包名全小写，避免下划线、大写和无意义缩写。
- 抽象类建议使用 `Abstract` 或 `Base` 开头。
- 异常类以 `Exception` 结尾。
- 测试类以 `Test` 结尾。
- 不使用拼音、无意义缩写或随意缩写。

## 3. 代码格式

- `if`、`for`、`while` 即使只有一行也必须使用 `{}`。
- 复杂表达式应拆分为有业务含义的局部变量或私有方法。
- 避免过深嵌套，优先使用提前返回、拆分方法或明确的业务分支。
- 不写魔法值，业务代码、状态码、固定字符串和数字阈值应抽为常量或枚举。
- 单个类、方法和代码块应保持职责聚焦，避免把多个业务概念揉在一起。

## 4. 对象与类型

- DTO、Entity、领域对象、VO / Response 和外部系统 DTO 必须分离。
- `equals` 和 `hashCode` 需要成对重写。
- `BigDecimal` 数值比较优先使用 `compareTo`，避免用 `equals` 判断数值相等。
- 金额、汇率和数量等精确值不使用浮点类型表达。
- Boolean 字段命名要避免和序列化框架产生歧义。
- 工具类应禁止实例化。

## 5. 集合与空值

- 集合初始化时，能预估容量就指定容量。
- 遍历 `Map` 时优先使用 `entrySet`。
- 不在增强 `for` 循环中直接删除集合元素。
- 注意 `Arrays.asList` 返回的列表不支持普通结构修改。
- 注意 `subList` 与原集合存在关联关系。
- 方法返回集合时优先返回空集合，不返回 `null`。
- 对外部输入、第三方返回和可空字段做明确空值处理。

## 6. 并发规范

- 不随意直接创建线程。
- 线程池参数必须明确，包括核心线程数、最大线程数、队列、拒绝策略和线程名。
- 共享变量必须考虑线程安全和可见性。
- 锁粒度要小，避免死锁和长事务持锁。
- `ThreadLocal` 使用后必须清理。

## 7. 异常与日志

- 不吞异常。
- 不使用异常控制正常业务流程。
- 捕获异常后要么完成明确处理，要么转换为受控异常继续抛出。
- 日志必须有足够上下文，便于定位问题。
- 日志不得输出 Authorization、Cookie、Token、Secret、密码、原始客户消息、附件 URL 或个人敏感信息。
- 不使用 `System.out.println` 输出业务日志。
- 日志级别要准确，只有真正错误才使用 `error`。

## 8. 数据库与事务

- 表名、字段名、索引名应表达清楚业务含义。
- 不使用 `field1`、`ext1`、`remark1` 等模糊字段承载正式业务语义。
- 写操作必须考虑幂等、并发版本、事务边界、审计和失败恢复。
- SQL 不做无条件全表更新或删除。
- 时间、金额、状态和外部业务标识应使用结构化字段表达。
- 已发布数据库 migration 不直接修改，修正通过新增 migration 完成。

## 9. 安全规范

- Secret 不进入代码、前端、日志、测试夹具或提交历史。
- 用户输入、外部系统响应和文件路径必须做边界校验。
- 错误响应不得暴露内部堆栈、SQL、Token、Secret、客户隐私或完整原始消息。
- 测试数据使用合成数据，不使用真实客户、真实组织、真实租户或真实支付信息。

## 10. 注释规范

- 注释说明业务含义、边界和原因，不复述类名、方法名或字段名。
- 复杂流程、幂等键、并发控制、事务边界、错误转换、外部系统字段映射和安全脱敏逻辑必须写必要中文注释。
- 不用 `TODO` 代替真实说明。
- 修改旧代码时，触达复杂逻辑应顺手补齐必要注释。

## 11. 项目落地建议

- IDEA 插件可以辅助发现问题，但不要作为唯一检查手段。
- 后续项目建立 Maven 构建后，建议通过 PMD、Checkstyle、Spotless 或同类工具固化可自动检查的规则。
- coding agent 生成 Java 代码时，应先满足项目分层和业务边界，再满足本文命名、异常、日志、集合、并发、数据库和安全细节。
