2

我需要在运行时设置一个布尔变量,任何其他类都可以访问该变量(无需在类之间传递变量)。这个变量将是一个配置设置,并且取决于用户在运行时设置的一些值。

我怀疑单例是要走的路,但是花了一上午的时间阅读它,我似乎找到了很多关于创建它们的最佳方式的示例(和论据),而没有提及如何实际使用它们。

单例是解决这个问题的方法吗?

如果是这样,任何人都可以提供一个可以设置布尔值的单例示例,可以从任何其他类静态访问吗?

编辑:我真是个白痴(完全使问题复杂化,并且错过了最简单的解决方案)。

public static volatile boolean yourBoolean;看起来它会完美地工作

4

3 回答 3

12

如果您只需要一个布尔值,则无需使用单例。只需声明一个:

public static volatile boolean yourBoolean;

(如果您在多线程环境中,使用 volatile 关键字确保所做的所有更改在线程间可见)。

于 2012-10-12T12:12:30.937 回答
2

如果变量将包含在运行时不会更改的配置设置,我建议您使用final static变量。请参见下面的示例:

public class Main {
    public final static String CONFIGURATION_SETTING = "some_setting";
}

您可以使用以下参考来访问此常量:

Main.CONFIGURATION_SETTING

只要您导入 Main 类,它将在您的整个解决方案中可用。

于 2012-10-12T12:13:52.143 回答
1

我认为单例不一定是您在这里需要的-正如您的问题本身所述,您所需要的只是一个可以被任何其他类访问的变量。

因为你不想通过任何东西,它必须是static- 当然它必须是public为了让其他班级看到它。

因此,实现这一目标的最简单方法如下:

public class Config {
    public static boolean flag;
}

然后任何类都可以将值读取为Config.flag.

如果您的应用程序中有多个线程,则需要考虑线程安全性。对于简单的单个布尔值,您只需将该字段标记为volatile. 但是,如果您正在做一些更复杂的事情,或者一次更新多个值,您需要确保这些更新是原子的并且以适当的方式对其他线程可见。

于 2012-10-12T12:13:04.370 回答