定义一个Java变量的最佳实践,它就像C的本地静态变量一样

Joh*_*ada 5 java

在C中,我可以在函数中创建一个静态变量.该变量的空间不与函数变量一起分配,它是在程序启动时分配的.(不要太苛刻地模仿我的C,我已经用Java编程了太久:)

void myFunc(){
  static SomeStruct someStruct;
  someStruct.state=INITIALIZED;
  goDoSomethingInteresting(MY_COMMAND,&someStruct);
}
Run Code Online (Sandbox Code Playgroud)

在Java中,如果我想做类似的事情,我创建一个类变量然后使用它.

Class TheClass {
   SomeStruct someStruct = new SomeStruct();
   void myFunc(){
     someStruct.setState(INITIALIZED);
     goDoSomethingInteresting(MY_COMMAND,someStruct);
   }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是做这样的事情的最佳做法是什么?我真的想将我的变量someStruct与我的函数相关联myFunc,因为myFunc它是唯一应该知道或使用的代码someStruct,但除了将变量放在代码中接近函数之外,没有办法建立这种关联.如果你把它放在上面,那么函数的Javadoc看起来很不可思议,如果你把它放在下面,那么它们不是很清楚它们属于一起.

通常我只是someStruct在本地创建,但在我的情况下,创建它是非常昂贵的someStruct,我打电话给myFunc一个紧凑的循环.

Jon*_*ust 5

一个小类将干净地关联someStruct行为myFunc,但它是理解和维护事物的额外开销.可能是值得的,可能不是.

class TheClass {
   MyFuncBehavior myFuncer = new MyFuncBehavior();
   void myFunc() {
      myFuncer.myFunc();
   }
}

class MyFuncBehavior {
   private static SomeStruct someStruct = new SomeStruct();

   public void myFunc() {
     someStruct.setState(INITIALIZED);
     goDoSomethingInteresting(MY_COMMAND,someStruct);
   }
}
Run Code Online (Sandbox Code Playgroud)