Files
2026Technology-Competition/data/demo-pmd/reports/AccessorGen2-review.md
T

62 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 代码审查报告
**文件:** `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 但构造函数为 privateAPI 设计矛盾**
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 方法以便读取计数,或移除该字段及递增语句。