0

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

最初,我选择了依赖注入。很快,方法参数数量随着几乎所有东西的需要而增加。在某些类的几乎每个参数中看到单个布尔值是一种痛苦。我决定尝试一种静态方法。我想出了以下类结构:

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

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

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

4

1 回答 1

1

如果你使用依赖框架,你绝对应该使用它。

例如,如果您使用的是 Spring 框架,您可以像这样注入它,因此值是从例如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;
    }
}
于 2020-03-24T23:11:53.180 回答