3

ソナーは私に「特異フィールド」のルール違反を与えています。

このようなメソッドを1つだけ使ってクラス分けしています。

public class MyClass{

   MyType object;   

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

}

ここでmyMethodは数え切れないほど呼び出されます。

  1. MyTypeのオブジェクト作成のコストを節約できますか?

  2. Sonarは、myMethod()内でMyTypeを宣言するように指示しています。これにより、オブジェクト作成のコストが発生しますか?

説明をお願いします...

4

1 に答える 1

8

object実際のコードでは、フィールドとして宣言する必要は厳密にはありません。

実際、別のオブジェクトパーツからアクセスする必要はないため、プログラムワークフロー全体でその状態を保存する理由はありません(わずかなメモリを無駄にしています...)。

したがって、ガベージコレクターは、終了するとすぐにローカル変数を収集できますmyMethod()

ソナーはあなたが次のように宣言することを期待しています:

public class MyClass{  

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

}
于 2012-12-04T13:39:12.930 に答える