我需要在运行时设置一个布尔变量,可以被任何其他类访问(不必将变量从类传递给类)。此变量将是配置设置,并将取决于用户在运行时设置的某些值。
我怀疑单身是可行的方式,但是早上花了很多时间阅读它,我似乎找到了很多关于创建它们的最佳方法的例子(& arguments),而没有提到如何实际上使用它们。
单身是解决这个问题的方法吗?
如果是这样,任何人都可以提供一个单例的例子,它可以设置一个布尔值,可以从任何其他类中静态访问吗?
编辑:我是个白痴(完全过于复杂的问题,并且错过了最简单的解决方案)。 public static volatile boolean yourBoolean;
看起来它会完美运作
答案 0 :(得分:12)
如果您只需要一个布尔值,则无需使用单例。只需声明一个:
public static volatile boolean yourBoolean;
(如果您处于多线程环境中,使用volatile关键字确保所有更改在线程中可见。)
答案 1 :(得分:2)
如果变量在运行时包含一个不会改变的配置设置 ,我建议您使用final static
变量。请参阅以下示例:
public class Main {
public final static String CONFIGURATION_SETTING = "some_setting";
}
您可以使用以下参考来访问此常量:
Main.CONFIGURATION_SETTING
只要您导入Main类,它就可以在整个解决方案中使用。
答案 2 :(得分:1)
我认为单身人士不一定是你需要的 - 正如你的问题本身所说,你需要的只是一个可以被任何其他类访问的变量。
由于您不想传递任何内容,因此它必须是static
- 当然它必须是public
才能让其他类看到它。
因此,实现这一目标的最简单方法如下:
public class Config {
public static boolean flag;
}
然后,任何类都可以将值读为Config.flag
。
如果您的应用程序中有多个线程,则需要考虑线程安全性。对于简单的单个布尔值,您只需将该字段标记为volatile
即可。但是如果你正在做一些更复杂的事情,或者一次更新几个值,你需要确保这些更新是原子的,并以适当的方式对其他线程可见。