3

声纳让我违反了“奇异场”的规则。

我只用这样一种方法上课。

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()完成后立即收集您的局部变量。

Sonar 希望您声明如下:

public class MyClass{  

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

}
于 2012-12-04T13:39:12.930 回答