聲納有這樣的規則:不訪問實例數據應該是聲納警告:不訪問實例數據應該是「靜」,「私人」的方法
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