gpt4 book ai didi

java - 是否可以使用使用构造函数参数的枚举来创建 Java 单例

转载 作者:行者123 更新时间:2023-12-01 14:06:13 25 4
gpt4 key购买 nike

 public enum Singleton  {
INSTANCE;
String fromLocation;
String toLocation;

private void initialise(String fromLocation, String toLocation) {
this.fromLocation = fromLocation;
this.toLocation = toLocation;
}

public static void main(String[] args) {
Singleton s = INSTANCE;
s.initialise(args[0],args[1]);
}
}

我似乎无法理解具有普通 Java 类构造函数的语法,我也可以从主例程传递参数。对我来说,初始化例程似乎很难闻——但这是我能想到的最好的例程。有什么建议吗?

最佳答案

您的方法的问题源于枚举与单例一样好的主要原因。

让我用 Schrödinger's cat 进行类比思想实验。 enum 就像猫的状态,当盒子被打开时它会立即完全被知道,并永远保持这种状态。这是由枚举的性质保证的,即无论有多少人在框中查看,只有猫的状态的第一个查看者实际上会导致猫有一个状态。其他人都会看到那一刻的精确副本。

因此,您有两种方法将外部数据安装到枚举的最终状态。你可以保证是第一个打开盒子的人,或者 - 在这里我稍微扩展一下类比 - 你教猫在盒子第一次打开时快速伸出手并捕获它的状态。

选项 1 与实现单例一样复杂。绝对确定自己是第一几乎是不可能的。

因此选项 2 可能类似于:

public enum Singleton {

INSTANCE;
final String fromLocation;
final String toLocation;

private Singleton () {
// Reach out.
this.fromLocation = App.args[0];
this.toLocation = App.args[1];
}
}

您的App入口点如下所示:

class App {
static String[] args;

public static void main(String args[]) {
App.args = args;
}
}

这里有可怕的警告。首先,如果您不从 App.main 启动每个使用单例的应用程序,它都会崩溃。其次,如果您在 App 类中的任何位置访问单例,它可能会崩溃。

关于java - 是否可以使用使用构造函数参数的枚举来创建 Java 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com