Files
yexuejc-base/代码质量全量修复报告.md
yexuejc f7f1e59aea docs: 添加代码质量全量修复报告 + 更新CHANGELOG
- 新增 代码质量全量修复报告.md(含4分支验证矩阵+兼容性详情)
- CHANGELOG 记录全部 Blocker/Major/Minor 修复项
- 标注破坏性变更
2026-05-16 00:44:10 +08:00

9.6 KiB
Raw Permalink Blame History

yexuejc-base 代码质量全量修复报告

项目: yexuejc-base v2.0.0-jre21
修复日期: 2026-05-16
审计标准: SonarLint / Checkstyle 级别
分支规则: jre21(主) / jre17 / jre11 / jre8 兼容对应 JDK


一、修复总览

指标 数值
修改源文件数 23 个
修改测试文件数 1 个
代码变更 +488 / -511 行
涉及分支 4 个 (jre21/jre17/jre11/jre8)

各分支验证结果矩阵

分支 JDK 版本 编译 测试通过 测试总数 失败 状态
jre21 JDK 21.0.6 ✅ ✅ 358 0 🟢 全通过
jre17 JDK 17.0.13 ✅ ⚠️ 358 2 🟡 预存失败
jre11 JDK 11.0.25 ✅ ⚠️ 358 2 🟡 预存失败
jre8 JDK 1.8.0_432 ✅ ⚠️ 358 2 🟡 预存失败

注: 2 个预存失败均为 CsvUtilTest 中 CSV 特殊字符/换行符处理在 JDK 17/11/8 与 JDK 21 行为差异,非本次修改引入。


二、Blocker 级别修复(7 项 → 全部完成 ✅)

# 文件 问题 修复内容 影响分支
1 RSA.java:262 switch 表达式(Java 12+) 改为 if-else-if 链式(jre8/jre11降级)/保留 switch 表达式(jre21) jre8, jre11
2 JwtUtil.java:173 var 关键字(Java 10+) 改为显式类型 io.jsonwebtoken.JwtBuilder jre8, jre10, jre11
3 JwtUtil.java:52 instace() 拼写错误 重命名为 instance(),内部类 Instace → Instance 全分支 (破坏性变更)
4 RequestHeader.java:121 geRespTime() 拼写错误 重命名为 getRespTime() 全分支 (破坏性变更)
5 FileUtil.java:295 connectBytes() 数组拷贝 Bug 修正 System.arraycopy 的 length 参数为正确值 全分支
6 ImgUtil.java:266 同上数组拷贝越界 同上修正 全分支
7 ObjUtil.java:393 System.out.println 残留 替换为 log.log(Level.WARNING, ...) 全分支

⚠️ 破坏性 API 变更(调用方需同步)

原 API (已废弃) 新 API 说明
JwtUtil.instace() JwtUtil.instance() 方法名 + 内部类名同步修正
.geRespTime() .getRespTime() RequestHeader getter 拼写修正
BaseVO.Mdfy BaseVO.Modify 接口命名规范化,Mdfy 标记 @Deprecated 并继承 Modify
MoneyUtil.toFen() 返回 int 返回 long 防止大金额溢出

三、Major 级别修复(16 类 ~60+ 处)

3.1 Javadoc 补全(最大类问题,~50+ 处)

文件 修复方法数 主要改进
DateTimeUtil.java 30+ 所有方法的 @param/@return 从空标签补全为中文描述
FileInput.java 12 全部 public 方法的参数说明 + Scanner 改 try-with-resources
AlgorithmUtil.java 5 Javadoc 格式规范 + StringBuffer→StringBuilder
MoneyUtil.java 6 Javadoc 补全 + toFen() 返回类型 int→long
ExcelImportUtil.java 3 @param/@return + validateExcel() 逻辑简化
MapRemoveNullUtil.java 3 @param 描述 + 删除死代码 remove()
FileUtil.java 8+ 半数方法 Javadoc + isFileExist 参数类型修正
JsonUtil.java 4 TODO 明确化 + 异常处理改进(加 SEVERE 日志)
SysUtil.java 10+ ThreadPoolExecutor 修复 + DecimalFormat ThreadLocal
BaseException/BaseRuntimeException 4 @return 描述补充 + @Serial 注解
DateConsts.java 13 @since 标签 + 全部常量字段注释
SymbolicConsts.java 6 EMPTY/EQUAL/BAR 等 6 常量补注释
LocalDateTimeSerializer.java 4 serialize() 完整 @param/@return/@throws
BaseVO.java 2 serialVersionUID @Serial + Mdfy→Modify

3.2 逻辑/性能修复

文件 问题 修复方案
SysUtil.java ThreadPoolExecutor 创建后立即 shutdown 改为 submit 后 shutdown + awaitTermination(60s)
SysUtil.java DecimalFormat 非线程安全 改用 ThreadLocal
MoneyUtil.java DecimalFormat 每次 new 同上 ThreadLocal 优化
MoneyUtil.java toFen() 返回 int 可能溢出 返回类型改为 long
MapRemoveNullUtil.java 死代码 remove() 方法未使用 直接删除
FileUtil.java readBigFile CSV 异常包装不一致 BaseException 不再包装为 RuntimeException
RSA2.java 异常消息硬编码字符串 改用 ExpCode.SYSTEM_ERROR 常量
CsvUtil.java 缺少 Copyright 头部 + author 不一致 加 MIT Copyright + @author 统一为 yexuejc
ZipUtil.java createZipFile 缺少 @throws 加 @throws ZipException

四、Minor 级别修复(10 项)

# 文件 问题 处理方式
1 多文件 (4处) serialVersionUID 缺少 @Serial jre21 加 @Serial;旧分支移除(Java 16+)
2 BaseVO.java 内部接口 Mdfy 命名不规范 新增 Modify 接口,Mdfy 标记 @Deprecated 并继承
3 AlgorithmUtil.java StringBuffer → StringBuilder 已替换
4 FileInput.java Scanner 未用 try-with-resources 已修改
5 DateTimeUtil.java 注释掉的 main 方法块 已清理
6 JsonUtil.java TODO 标记 已明确优化方向注释
7 MapRemoveNullUtil.java 死代码 remove() 已删除
8-9 MoneyUtil/SysUtil.java DecimalFormat 线程安全 已改 ThreadLocal
10 RSA.java volatile 字段直接暴露 记录待后续架构优化

五、跨分支兼容性处理

5.1 Java 版本专属语法(jre21 保留新特性)

语法特性 引入版本 jre21 jre17 jre11 jre8
switch 表达式(箭头) Java 14 ✅ 用 ❌ 降级if-else ❌ ❌
var 局部变量推断 Java 10 ❌ 显式类型 ❌ ❌ ❌
instanceof pattern matching Java 21(预览→正式) ✅ 用 ❌ 强制转型 ❌ ❌
@Serial 注解 Java 16 ✅ 用 ❌ 移除 ❌ 移除 ❌ 移除
System.Logger Java 9 ✅ 用 ✅ ✅ ❌ java.util.logging.Logger
Files.writeString() Java 11 ✅ 用 ✅ ✅ ❌ 自定义writeString
Optional.isEmpty() Java 11 ✅ 用 ✅ ❌ !isPresent ❌
List.of() Java 9 ✅ 用 ✅ ✅ ❌ Arrays.asList
jakarta.validation EE 9+ ✅ 用 ✅ ✅ ✅

5.2 各分支额外修改汇总

jre17 分支

  • pom.xml 替换:原 pom.xml 含大量乱码注释和未闭合 XML 注释导致 Maven 解析失败

jre11 分支(比 jre17 多 4 处降级)

  • RSA.java: instanceof pattern matching → 2处显式强制转型
  • BaseException/BaseRuntimeException: 同上各 1处
  • 移除 4 处 @Serial 注解 + import
  • PagerVO.java: javax.validation → jakarta.validation

jre8 分支(比 jre11 多 4 处额外降级)

  • RSA.java: System.Logger → java.util.logging.Logger(2处引用)
  • RSA.java: Files.writeString() → 自定义 writeString 兼容方法(新增 import Path/BufferedWriter)
  • StrUtil.java: Optional.isEmpty() → !isPresent()
  • 测试文件(3个): List.of() → Arrays.asList(共 20+ 处)

六、测试结果详情

jre21 分支(主分支,JDK 21.0.6)

Tests run: 358, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS ✅

按测试类分布:

测试类 通过 失败 错误
ConverterTest 31 0 0
AESEnhancedTest 11 0 0
AESTest 16 0 0
Base64MigrationTest 5 0 0
DES3NewTest 13 0 0
DES3Test 10 0 0
RSA2Test 14 0 0
RSATest 4 0 0
BaseExceptionTest 3 0 0
AlgorithmUtilTest 21 0 0
CsvUtilBeanTest 8 0 0
CsvUtilExample — 0 0
CsvUtilTest 19 0 0
DateTimeUtilTest 34 0 0
DateUtilTest 6 0 0
ExcelImportUtilTest 10 0 0
IdcardValidatorTest 16 0 0
ImgUtilTest 14 0 0
JsonUtilTest 2 0 0
JwtUtilTest 2 0 0
MapRemoveNullUtilTest 9 0 0
MoneyUtilTest 13 0 0
MsgUtilTest 2 0 0
ObjUtilEnhancedTest 10 0 0
ObjUtilTest 3 0 0
RegexUtilTest 27 0 0
StrUtilEnhancedTest 25 0 0
StrUtilTest 24 0 0
SysUtilTest 6 0 0
合计 358 0 0

七、提交记录

分支 Commit Hash 说明
jre21 8355e4b fix(quality): 全量代码质量修复 - Major/Minor级别
jre17 9e594bf fix(build): 修复pom.xml乱码 + 同步jre21修复
jre11 03f685c fix(quality): 同步jre21修复 + JDK11兼容性降级
jre8 4cb47dd fix(quality): 同步jre21修复 + JDK8兼容性降级

八、遗留技术债务

优先级 项目 说明 建议
P1 CsvUtilTest 2个失败 CSV 特殊字符/换行符在 JDK 17/11/8 与 21 行为不一致 排查 JDK 差异根因或调整测试断言
P2 RSA.java volatile 字段 algorithm/transformation 等直接暴露 考虑 builder 模式或 factory 重构
P2 日志框架统一 项目混合使用 java.util.logging 和 System.Logger 统一选择一种(建议 SLF4J)
P3 bouncycastle 版本 pom.xml 使用 jdk18on 后缀版本 jre8 分支可能需要 jdkon 版本

报告生成时间: 2026-05-16 00:40 执行引擎: Code Reviewer Expert (SonarLint / Checkstyle 标准)