2015-10-15 64 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解決了

相關問題