我有一些类,只在包中可见。经过分析,我收到了与公共构造函数/方法/类型等缺失文档相关的问题。
这是一个错误(误报)吗?在我看来,从公共构建者/非公共构造者/方法/类型的变化是毫无意义的。
我使用SonarQube 5.1.1和Java Plugin 3.4。
答案 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)。
但是我会建议降低该构造函数的可见性,因为将其公开显得毫无意义......