【问题标题】:re-initialize the static variables of a class to their original values java将类的静态变量重新初始化为其原始值 java
【发布时间】:2023-03-31 11:12:01
【问题描述】:

我有一个包含大量静态变量的类,并非所有变量都初始化为默认值(例如,我有一个布尔值,我初始化为 true,一个 Set,我初始化为一个新的 Set(),等等。 )。这个类有点像一个控制器,对其他类进行操作。在对一个类完成操作后,我想使用(如果存在)作为 java API 一部分的东西将其所有静态变量重新初始化为其原始值,这样我就不必制作“reinitializeClassVariables ()" 方法,其中包含大约十几个变量,每次我对类中声明的静态变量进行任何更改时都需要更新这些变量。有什么想法吗?

【问题讨论】:

  • 据我所知,不幸的是,Java API 不支持重新初始化变量。你必须自己做。

标签: java static initialization


【解决方案1】:

对一个类完成操作后,我想将其所有静态变量重新初始化为其原始值

说真的,使用 instance 变量会更好。然后您可以使用new 创建您的类的新实例(或包含您的参数的类),所有变量都将被初始化为其初始值。像这样的:

// All parameters (static if you so like)
static ControlParams controlParams = new ControlParams();

...

// Reset parameters
controlParams = new ControlParams();


这是 java API 的一部分,所以我不必创建 reinitializeClassVariables()

不,API 中没有这样的东西(实际上,我相信它必须是语言规范的一部分)。在您的用例中,使用静态变量是一个非常糟糕的选择。

【讨论】:

  • 同意。绝对需要制作这些实例变量。这作为静态的东西没有意义。
  • 如果它是可变的,那么静态可能没有意义。 (+1)
  • 是的。我只是认为,由于他的变量最初是静态的,如果controlParams 不是静态的,他会进行更多的重构。 :-)
【解决方案2】:

不,没有任何内置功能。您可以使用反射或字节码操作来做一些事情,但这并不值得,而且会使一切变得更加复杂。也许您可以将静态变量重构为一个新类,然后“完成后”使用新实例重置。

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 2017-12-07
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多