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

3.1 KiB

代码审查报告

文件: data\demo-pmd\src\org\example\beans\InvalidBeanDemo.java 语言: java 耗时: 106.9s 分析工具: pmd


总计: 10 | 错误: 1 | 警告: 8 | 建议: 1

静态分析 · 7 个问题

  • 🔴 pmd:SystemPrintln L30 使用了 System.out / System.err 输出。 建议: 请改用日志框架(如 java.util.logging.Logger、SLF4J)记录输出,以便控制日志级别、格式和输出目标。
  • 🟡 pmd:AtLeastOneConstructor L7 每个类都应该声明至少一个构造函数。 建议: 请为 MyBean 添加显式的无参构造器,例如 public MyBean() {},以保证符合类的基本构造约定。
  • 🟡 pmd:InvalidJavaBean L8 Bean 'MyBean' 的属性 'Label' 缺少 setter。 建议: 请为 label 属性添加标准 setter 方法:public void setLabel(String label) { this.label = label; }
  • 🟡 pmd:AtLeastOneConstructor L16 每个类都应该声明至少一个构造函数。 建议: 请为 WrapException 添加包私有无参构造器,例如 WrapException() {}
  • 🟡 pmd:CommentDefaultAccessModifier L17 方法 'bar()' 缺少注释掉的默认访问修饰符。 建议: 请在无修饰符方法前添加 /* default */ 注释,以明确其包私有可见性,如:/* default */ void bar() { ... }
  • 🟡 pmd:AvoidThrowingNewInstanceOfSameException L21 应避免在 catch 块中仅捕获异常,然后包装成同一类型的新异常并抛出。 建议: 请直接抛出原始异常,例如 throw se;,或者包装为具有更明确语义的其他异常类型。
  • 🟡 pmd:CommentDefaultAccessModifier L24 方法 'doWork()' 缺少注释掉的默认访问修饰符。 建议: 请在无修饰符方法前添加 /* default */ 注释,如:/* default */ void doWork() { ... }

AI 审查 · 3 条建议

  • 🟡 [AI] [design] bean-not-serializable L7 JavaBean 未实现 Serializable MyBean 作为 JavaBean 未实现 java.io.Serializable,也未声明 serialVersionUID,在需要持久化或会话复制的场景中无法正常序列化。 建议: 为 MyBean 添加 implements java.io.Serializable 并声明 private static final long serialVersionUID = 1L;。同时建议补充无参构造器(静态分析已要求)和 setter。
  • 🟡 [AI] [bug] unreachable-catch-block L20 空方法调用后的 catch 块不可达 doWork() 方法体为空,不会抛出任何异常,因此 bar() 中的 catch (IllegalStateException) 永远不会进入,属于死代码。异常处理流程在当前代码中无效。 建议: 若 doWork() 尚未实现,应删除 try-catch 并直接调用;若 doWork() 可能抛异常,应先补全方法体。建议去掉无意义的相同异常包装。
  • 🔵 [AI] [style] one-top-level-class-per-file L16 多个顶层类定义在同一个源文件中 MyBean、WrapException、BeansMain 三个顶层类写在同一个 .java 文件中,使文件职责不单一,降低可读性和可维护性。 建议: 将 WrapException 和 BeansMain 分别抽取到独立源文件(WrapException.java、BeansMain.java),并为每个类保留必要的 public/包私有声明。