如何解决squid:UndocumentedApi对包类中的公共方法

时间:2015-07-16 20:30:15

标签: java sonarqube

我有一些类,只在包中可见。经过分析,我收到了与公共构造函数/方法/类型等缺失文档相关的问题。

Example class

这是一个错误(误报)吗?在我看来,从公共构建者/非公共构造者/方法/类型的变化是毫无意义的。

我使用SonarQube 5.1.1和Java Plugin 3.4。

2 个答案:

答案 0 :(得分:1)

应该记录公共构造函数,因此它不是误报。
但是,您不需要公开构造函数:)

答案 1 :(得分:1)

关于方法,字段和内部类:

方法(或字段或内部类)在包私有类中公开意味着如果使用公共类扩展,则来自包的公共成员 - 从外面可以看到私人课程!因此,它们必须被视为公开,因此需要记录。

示例:

  • package-private class A

    package org.foo;
    
    class A {
      public int field;
      public void method() {}
      public class Inner {}
    }
    
  • 公开 B

    package org.foo;
    
    public class B extends A {
    }
    
  • 其他套餐,类 C

    package org.bar;
    
    public class C {
      void test() {
        B b = new B();
    
        int f = b.field;          // visible
        B.Inner = b.new Inner();  // visible
        b.method();               // visible
      }
    }
    

关于构造函数:

由于package-private类的构造函数只能从同一个包中看到,并且这些构造函数不能从另一个包中调用,即使通过公共子类也是如此,因此在它们上面引发一个问题确实是错误的,它应该是在Java插件中更正了SQ规则(参见SONARJAVA-1557)。

但是我会建议降低该构造函数的可见性,因为将其公开显得毫无意义......