声纳有这样的规则:不访问实例数据应该是声纳警告:不访问实例数据应该是“静”,“私人”的方法
private
方法static
private
不访问实例数据的方法可以是static
到 防止对方法合同的任何误解。
我在从匿名内部类创建新对象的方法中有此警报。
class Exemple {
private Object _instanceObject;
...........
private Something createSomething(String key) {
return new Something(key) {
@Override
public Object getValue(Object element) {
return _instanceObject.getSomething(element);
}
};
}
}
_instaceObject
如何是一个非静态字段。我无法对非静态字段_instanceObject
进行静态引用。正如声纳所说,我不能使这个方法成为静态的,因为有一个访问实例数据。
我的问题是声纳没有看到匿名内部类中使用_instanceObject
因此声纳显示我警告:静态‘私”不访问实例数据应该是方法’声纳说:。我应该做的方法静态的。
使“createSomething”一个“静态”的方法。
是否适合使用注释// NOSONAR忽略这种虚假违规声纳表示?
Ignore violations with the new ‘//NOSONAR’ comment
的NOSONAR标签告诉声纳忽略任何规则引擎被用于扫描特定代码 线的所有违规行为。当然, Sonar仍然能够管理广泛使用的// NOPMD和// CHECKSTYLE:OFF ... ON。我们只是添加了一种本地方式来管理误报。 此功能对于已激活 Findbugs规则的用户来说是一个真正的改进,因为没有干净的方式将Findbugs标记为假 正面:现在有'// NOSONAR'。
这是声纳中的一个已知错误吗?
请发布一个完整的示例来生成警告。 – chrylis
好吧,什么是'instanceObject'和它是如何声明的 – SomeJavaGuy
你为什么要这么做?看起来像一个反模式。代码线程安全吗?除了声呐警告之外,这个代码还有更多的问题。 – John