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

时间:2012-12-04 12:40:36

标签: java sonarqube

声纳正在给我违反“奇异场”的规则。

我只有一个像这样的方法上课。

public class MyClass{

   MyType object;   

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

}

这里 myMethod 被无数次调用。

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

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

  3. 请解释....

1 个答案:

答案 0 :(得分:6)

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

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

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

Sonar希望您声明如下:

public class MyClass{  

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

}