2015-10-15 74 views
2

声纳有这样的规则:不访问实例数据应该是声纳警告:不访问实例数据应该是“静”,“私人”的方法

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'。

这是声纳中的一个已知错误吗?

+2

请发布一个完整的示例来生成警告。 – chrylis

+0

好吧,什么是'instanceObject'和它是如何声明的 – SomeJavaGuy

+2

你为什么要这么做?看起来像一个反模式。代码线程安全吗?除了声呐警告之外,这个代码还有更多的问题。 – John

回答

0

该问题已经通过Sonar升级到版本5.1.2解决了

相关问题