2012-12-04 36 views
2

聲納給我一個違反「奇異場」的規則。聲明場外/內方法:聲納奇異場規則

我有我只有一類這樣的方法。

public class MyClass{ 

    MyType object; 

    public void myMethod(){ 
     object= aMethod(arg); //Returns instance for the class MyType 
    } 

} 

這裏myMethod的叫了無數次。

  1. 上午我保存對象創建的成本的MyType

  2. 聲納告訴我宣佈裏面的MyType的MyMethod()。 這是否會導致對象創建的成本?

任何解釋,請....

+1

如果你在每個'myMethod'調用比沒有,你不節能對象創建的成本創造MyType'的'新實例。你能展示完整的課程代碼嗎? –

+0

你的意思是,由於** aMethod **返回** MyType **的實例,它與創建** MyType **自身的新實例相同嗎?如果是這種情況,我最好遵循Sonar Rules並使** MyType **成爲本地規則。 :) – Mawia

回答

6

在您的實際代碼,有嚴格不需要聲明object作爲一個字段。實際上,它甚至不需要被另一個對象部分訪問,所以它的狀態沒有理由在整個程序工作流程中被保存(毫無意義地浪費內存......)。

只要myMethod()完成,垃圾收集器就可以收集您的本地變量。

聲納希望你聲明如下:

public class MyClass{ 

    public void myMethod(){ 
     MyType object = aMethod(arg); //local variable instead of field ;) 
    } 

}