gpt4 book ai didi

java - 将所需变量传递给所有代码的最佳设计模式,无需

转载 作者:行者123 更新时间:2023-12-02 08:49:58 28 4
gpt4 key购买 nike

基本上,我有一个 boolean 值,大型 API 项目中大约 20% 的类都使用它。从实用方法到更大的类,一切都使用它。我可以在程序启动时设置状态(不会改变),但不知道访问它的“最佳”方式。

最初,我选择了依赖注入(inject)。很快,方法参数的数量就增加了,因为几乎所有东西都需要它。观察某些类中几乎每个参数中的单个 boolean 值是一件痛苦的事情。我决定尝试静态方法。我想出了以下类结构:

public final class MyClass {
private static boolean neededBoolean;

public MyClass(boolean bool) {
MyClass.setBoolean(bool);
}

private static void setGems(boolean bool) {
MyClass.neededBoolean = bool;
}

public static boolean getNeededBoolean() {
return neededBoolean;
}
}

但这感觉很奇怪,大多数静态方法通常不读取内部变量,并且任何程序都可以轻松(有意或无意)更改所有内容的变量。我知道我也可以使用单例,但我被告知这些最适合记录器和其他用途,而不是读取静态变量。我也不想公开 boolean 值,以便任何其他类都可以编辑它。

那么这里最好的选择是什么?过度使用依赖注入(inject)、单例或我当前的系统

最佳答案

如果您正在使用依赖框架,那么您绝对应该使用它。

例如如果您使用 Spring 框架,您可以像这样注入(inject)它,因此该值是从例如初始化的application.properties 文件:

@Component
class MyComponent {
@Value("${needed.boolean}")
private boolean neededBoolean;

// code here that can use the value
}

不过,您可能会考虑使用属性配置对象,这样属性名称就不会在您的整个代码中重复。这样就更安全。

<小时/>

如果您没有依赖框架并且可以调用静态方法(紧密耦合),并且该值仅在启动时初始化,我建议使用这样的类:

public final class AppConfig {
private static Boolean neededBoolean;

public void static initialize(boolean neededBoolean) {
if (neededBoolean != null)
throw new IllegalStateException("Already initialized");
AppConfig.neededBoolean = neededBoolean;
}

public static boolean getNeededBoolean() {
if (neededBoolean == null)
throw new IllegalStateException("Not initialized");
return neededBoolean;
}
}

关于java - 将所需变量传递给所有代码的最佳设计模式,无需,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60840616/

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