3.1 KiB
3.1 KiB
代码审查报告
文件: data\demo-pmd\src\org\example\beans\InvalidBeanDemo.java
语言: java
耗时: 106.9s
分析工具: pmd
总计: 10 | 错误: 1 | 警告: 8 | 建议: 1
静态分析 · 7 个问题
- 🔴
pmd:SystemPrintlnL30 使用了 System.out / System.err 输出。 建议: 请改用日志框架(如 java.util.logging.Logger、SLF4J)记录输出,以便控制日志级别、格式和输出目标。 - 🟡
pmd:AtLeastOneConstructorL7 每个类都应该声明至少一个构造函数。 建议: 请为 MyBean 添加显式的无参构造器,例如public MyBean() {},以保证符合类的基本构造约定。 - 🟡
pmd:InvalidJavaBeanL8 Bean 'MyBean' 的属性 'Label' 缺少 setter。 建议: 请为 label 属性添加标准 setter 方法:public void setLabel(String label) { this.label = label; }。 - 🟡
pmd:AtLeastOneConstructorL16 每个类都应该声明至少一个构造函数。 建议: 请为 WrapException 添加包私有无参构造器,例如WrapException() {}。 - 🟡
pmd:CommentDefaultAccessModifierL17 方法 'bar()' 缺少注释掉的默认访问修饰符。 建议: 请在无修饰符方法前添加/* default */注释,以明确其包私有可见性,如:/* default */ void bar() { ... }。 - 🟡
pmd:AvoidThrowingNewInstanceOfSameExceptionL21 应避免在 catch 块中仅捕获异常,然后包装成同一类型的新异常并抛出。 建议: 请直接抛出原始异常,例如throw se;,或者包装为具有更明确语义的其他异常类型。 - 🟡
pmd:CommentDefaultAccessModifierL24 方法 'doWork()' 缺少注释掉的默认访问修饰符。 建议: 请在无修饰符方法前添加/* default */注释,如:/* default */ void doWork() { ... }。
AI 审查 · 3 条建议
- 🟡 [AI] [design]
bean-not-serializableL7 JavaBean 未实现 Serializable MyBean 作为 JavaBean 未实现 java.io.Serializable,也未声明 serialVersionUID,在需要持久化或会话复制的场景中无法正常序列化。 建议: 为 MyBean 添加implements java.io.Serializable并声明private static final long serialVersionUID = 1L;。同时建议补充无参构造器(静态分析已要求)和 setter。 - 🟡 [AI] [bug]
unreachable-catch-blockL20 空方法调用后的 catch 块不可达 doWork() 方法体为空,不会抛出任何异常,因此 bar() 中的 catch (IllegalStateException) 永远不会进入,属于死代码。异常处理流程在当前代码中无效。 建议: 若 doWork() 尚未实现,应删除 try-catch 并直接调用;若 doWork() 可能抛异常,应先补全方法体。建议去掉无意义的相同异常包装。 - 🔵 [AI] [style]
one-top-level-class-per-fileL16 多个顶层类定义在同一个源文件中 MyBean、WrapException、BeansMain 三个顶层类写在同一个 .java 文件中,使文件职责不单一,降低可读性和可维护性。 建议: 将 WrapException 和 BeansMain 分别抽取到独立源文件(WrapException.java、BeansMain.java),并为每个类保留必要的 public/包私有声明。