2014-02-24 13 views
0

我有一个对象我在等的方法初始化:使用类级别字段或方法变量?

public void something() 
{ 
    Dummy obj = Factory.getDummy(); 
    method2(obj); 
} 
现在

,这Dummy目的是通过许多方法

public void method2(Dummy obj) 
{ 
    method2(obj); 
    .... 
} 

现在可以使用,我怀疑是这种情况应如何处理,我这样做的方式。或者,使something中的obj成为级别字段并在something中初始化。

,如:

private Dummy obj; 

public void something() 
{ 
    obj = Factory.getDummy(); 
    method2(obj); 
} 

并在随后的方法使用。 (从方法中删除参数)。

那么,处理这种情况的最佳方法是什么?为什么?

回答

6
  1. 如果它与该类强烈关联,请将其设置为静态。
  2. 如果它与某个实例强烈关联,请将其设为非静态成员。
  3. 如果它与方法调用或当前线程紧密关联,或者您无法决定(1)或(2),请将其设置为方法本地。
2

您应该将obj声明为class-level字段,然后在构造函数中将其实例化。

但更多的积分清除:

  • 如果something(),并像method2()意想不到的Dummy对象的方法,都位于同一个类中,那么你甚至都不需要传递的对象。在这种情况下,上述语句如果不在同一个类中,则支持
  • ,然后根据它们的类型通过它们的实例或类调用方法来传递该对象。
2

一般你应该最小化范围的一个变量。但是,如果变量在您的class中非常用,则应声明它为级别作为实例变量。

1

如果某些property与类关联,那么该属性应该是静态的。也就是说,如果某些属性在所有类的实例中都是相同的,那么property应该是类中的静态属性。

如果某些property对于每个类的实例都不相同,那么property应该是该类的成员变量(非静态变量)。

如果一些财产需要暂时的某些操作,那么将该财产作为操作的本地变量(method)。