声明字段外/内方法:声纳奇异场规则

Maw*_*wia 2 java sonarqube

声纳正在给我违反"奇异场"的规则.

我只有一个像这样的方法.

public class MyClass{

   MyType object;   

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

}
Run Code Online (Sandbox Code Playgroud)

在这里myMethod被无数次召唤.

  1. 我是否为MyType节省了对象创建的成本?

  2. Sonar告诉我在myMethod()中声明MyType.这会导致对象创建的成本吗?

任何解释请....

Mik*_*378 6

在您的实际代码中,完全没有必要声明object为字段.

实际上,它甚至不需要被另一个对象部分访问,因此它的状态没有理由在程序工作流程中被保存(浪费一点点内存......).

因此,垃圾收集器可以在myMethod()完成后立即收集您的本地变量.

声纳希望您声明如下:

public class MyClass{  

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

}
Run Code Online (Sandbox Code Playgroud)