java - 定义行为(某种)类似于 C 的局部静态变量的 Java 变量的最佳实践

标签 java

在 C 中,我可以在函数中创建静态变量。该变量的空间不与函数变量一起分配,它是在程序启动时分配的。 (不要太严厉地 mock 我的 C,我用 Java 编程太久了:)

void myFunc(){
  static SomeStruct someStruct;
  someStruct.state=INITIALIZED;
  goDoSomethingInteresting(MY_COMMAND,&someStruct);
}

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

Class TheClass {
   SomeStruct someStruct = new SomeStruct();
   void myFunc(){
     someStruct.setState(INITIALIZED);
     goDoSomethingInteresting(MY_COMMAND,someStruct);
   }
}

我的问题是,执行此类操作的最佳做​​法是什么?我真的很想关联我的变量 someStruct用我的函数 myFunc ,因为 myFunc是唯一应该知道或使用 someStruct 的代码,但是除了在代码中将变量放在函数附近之外,没有办法建立这种关联。如果你把它放在上面,那么这个函数的 Javadoc 看起来很奇怪,如果你把它放在下面,那么就不太清楚它们是否属于一起。

通常我会创建 someStruct在本地,但就我而言,创建 someStruct 非常昂贵, 我调用 myFunc在一个紧密的循环中。

最佳答案

一个小类会将 someStructmyFunc 的行为干净利索地关联起来,但这是理解和维护事物的额外开销。可能值得,也可能不值得。

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);
   }
}

关于java - 定义行为(某种)类似于 C 的局部静态变量的 Java 变量的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198516/

相关文章:

java - 我想在不使用 split 函数的情况下分割字符串?

java - 下载 GAE 源代码时出现 400 Bad Request 错误

java - 创建一个包含大量静态字段的常量类是否可以?

java - 解释 Integer.MAX_VALUE 和 Integer.MIN_VALUE 在数组中查找最小值和最大值

java - 似乎无法将 JTextArea 添加到 JScrollPane 中?

java - 使用 Google Endpoint 保存 blob

Java .java 的含义~

java - 如何在 Kotlin 中解析 Volley 中来自服务器的错误

Java 泛型比较器

java - ByteBuffer比较java中的IndexOutOfBoundsException