62 lines
3.8 KiB
Markdown
62 lines
3.8 KiB
Markdown
# 代码审查报告
|
||
|
||
**文件:** `data\demo-pmd\src\com\demo\bestpractices\extra\AccessorGen2.java`
|
||
**语言:** java
|
||
**耗时:** 163.0s
|
||
**分析工具:** pmd
|
||
|
||
---
|
||
|
||
总计: 14 | 错误: 3 | 警告: 11 | 建议: 0
|
||
|
||
静态分析 · 11 个问题
|
||
|
||
- 🔴 `pmd:ClassWithOnlyPrivateConstructorsShouldBeFinal` L14
|
||
该类只有私有构造函数,可能应设为 final。
|
||
建议: 将内部类 Inner 声明为 final,例如 public final class Inner。
|
||
- 🔴 `pmd:SystemPrintln` L38
|
||
使用了 System.out/err 输出。
|
||
建议: 改用日志框架,例如 System.getLogger("AccMain").info(...),避免直接使用 System.out。
|
||
- 🟡 `pmd:AtLeastOneConstructor` L10
|
||
类应至少声明一个构造函数。
|
||
建议: 为 AccessorClassGen 添加显式构造函数,例如 public AccessorClassGen() {}。
|
||
- 🟡 `pmd:CommentDefaultAccessModifier` L11
|
||
方法 'method()' 缺少默认访问修饰符的注释。
|
||
建议: 在方法声明前添加 /* default */ 注释,或显式指定 public/private/protected 访问修饰符。
|
||
- 🟡 `pmd:UnusedLocalVariable` L12
|
||
避免使用未使用的局部变量,例如 'ic'。
|
||
建议: 直接执行 new Inner() 而不是赋值给未使用的变量,或者直接删除该行。
|
||
- 🟡 `pmd:AtLeastOneConstructor` L21
|
||
类应至少声明一个构造函数。
|
||
建议: 为 AccessorMethodGen 添加显式构造函数,例如 public AccessorMethodGen() {}。
|
||
- 🟡 `pmd:UnusedPrivateField` L22
|
||
避免使用未使用的私有字段,例如 'counter'。
|
||
建议: 为 counter 添加 getter 方法,使其被读取,或删除该字段。
|
||
- 🟡 `pmd:CommentDefaultAccessModifier` L25
|
||
构造函数 'InnerClass()' 缺少默认访问修饰符的注释。
|
||
建议: 在构造函数声明前添加 /* default */ 注释,或显式指定访问修饰符。
|
||
- 🟡 `pmd:AtLeastOneConstructor` L32
|
||
类应至少声明一个构造函数。
|
||
建议: 为 HardCodedIp 添加显式构造函数,例如 HardCodedIp() {}。
|
||
- 🟡 `pmd:CommentDefaultAccessModifier` L33
|
||
字段 'addr' 缺少默认访问修饰符的注释。
|
||
建议: 在字段声明前添加 /* default */ 注释,或显式指定 private/public/protected。
|
||
- 🟡 `pmd:AvoidUsingHardCodedIP` L33
|
||
不要硬编码 IP 地址 '192.168.1.1'。
|
||
建议: 将 IP 地址移入配置文件或环境变量,运行时读取,例如 System.getenv("SERVER_IP"),并校验格式。
|
||
|
||
AI 审查 · 3 条建议
|
||
|
||
- 🔴 [AI] [bug] `multiple-public-top-level-classes` L21
|
||
**同一源文件中包含多个 public 顶层类**
|
||
Java 规定一个 .java 文件只能包含一个 public 顶层类,且类名必须与文件名一致。当前第 10 行 AccessorClassGen 和第 21 行 AccessorMethodGen 均为 public,将导致编译失败。
|
||
建议: 将 AccessorMethodGen 改为包私有(去掉 public),或将其拆分为独立的 .java 文件。
|
||
- 🟡 [AI] [design] `public-inner-class-with-private-constructor` L14
|
||
**内部类 Inner 声明为 public 但构造函数为 private,API 设计矛盾**
|
||
Inner 被声明为 public,但其构造函数是 private,外部代码(除外部类 AccessorClassGen 外)无法实例化它。这种公开但不可实例化的类型会困惑调用方,应缩小可见性。
|
||
建议: 将 Inner 改为 private 嵌套类;若同时满足 PMD 建议,可改为 private final class Inner。
|
||
- 🟡 [AI] [bug] `write-only-field` L22
|
||
**counter 字段只写不读,自增操作无任何效用**
|
||
AccessorMethodGen.InnerClass 构造函数中执行 counter++,但 counter 从未被任何方法读取,该状态变化不可观测。PMD 的 UnusedPrivateField 提示了字段未使用,但更深层的问题是递增操作本身没有对应读取方,可能表明逻辑未完成或存在缺陷。
|
||
建议: 为 counter 添加 getter 方法以便读取计数,或移除该字段及递增语句。
|