所以我在搜索关于在一个类中存储数据,并找到this。但是,这不是我想要的。我想知道的是这是不好的做法,是否会导致应用程序出现性能问题,或者是否有其他方法可以做到这一点等等......(而且我不会在Android上这样做)。
假设我有一个存储HashMap<Enum, Object>
的类,并且在main中创建类时会初始化。
public Main() {
// Creates the HashMap, initialized in the constructor 'MemoryContainer'
MemoryContainer m = new MemoryContainer();
m.getTestHash().put(SomeEnum.TEST, "Test"); // Using created HashMap
}
除了每次使用它时都会输出值,这会导致重大问题吗?如果是这样,还有其他选择吗?
答案 0 :(得分:0)
我不会过多关注性能问题(当然,我不知道你的应用程序做了什么或想做什么以及它是如何实现的。)
你首先要看的是Mutability - 在你的例子中,没有什么能阻止我通过调用在运行时更改配置
m.getTestHash().put(SomeEnum.TEST, "NotATestAnymore")
- 这会立即改变该特定设置的每次使用行为。
我也不确定为什么你不会只使用直接提供(类型化)getter的配置类,如果你知道应用程序启动时的所有配置设置,那么一个构造函数包含所有设置。
您是否计划从外部来源(例如文件)中读取配置?
答案 1 :(得分:0)
否强>,
它不会引起重大问题。
此外,最好将这些变量(在您的情况下为HashMap
)保留在远离主类(包含应用程序逻辑)的不同类中。
答案 2 :(得分:0)
在类中存储静态值没有任何问题,但这不是一个好习惯。
要存储常量,您应该创建一个interface
,因为接口中的每个字段都已经是常量(公共静态最终)。
更好的方法是将这些值存储在properties files
中,并根据需要加载它们。
属性文件可以存储在外部,如果需要,不知道源代码的人将能够修改此属性文件。例如,您可以在属性文件中存储数据库连接详细信息,如果服务器支持管理员确定数据库实例已关闭,则他/她可以编辑属性文件以将应用程序指向新的。
最后,为了获得最大的灵活性,您根本不应将配置存储在应用程序中。它可以存储在database like MySql
或快速数据结构存储中,如Redis
。这将允许应用程序的多个实例共享配置数据,并且还允许您通过在数据库中修改配置来动态修改配置。
有时,Git repository
也用于存储此类数据(如微服务的情况)。 Git存储库除了在所有实例之间共享外,还保留了修改历史。