首先,让我说我真的不确定这是一个SO问题还是程序员SE问题,我从这里开始,因为这个社区更加活跃。
我有一个存储在java属性文件中的配置文件:
java_config=something
java_another=something else
我有一个控制此配置构建的枚举:
public enum ConfigFactory {
INSTANCE;
private Map<String, String> mSettings = new HashMap<String, String>();
public void build(String path) {
// load config file into mSettings,
// where the property k/v are stored in the hashmap as a k/v
}
}
我想弄清楚的是将k / v暴露给系统的“最佳”方式是什么。解决方案很简单:
java_confg
和java_another
,或final String
var,间接引用(不是反映)java_config
?/**
* addendum to ConfigFactory
*/
public String getValue(String s) {
// return value from key
}
/** end of addendum to ConfigFactory **/
/**
* Invoked somewhere in the program
*/
ConfigFactory.Instance.getValue("java_config");
但如果配置的密钥发生变化,使用上述方法需要进行大量更改。这正是我想要避免的。但它非常快,ConfigFactory将具有“更小”的堆内存占用量(实际增益取决于声明的字符串数量),并且显而易见的是我在ConfigFactory
中实际引用了哪个值。
/**
* addendum to ConfigFactory
*/
public static final String JAVA_CONFIG = "java_config";
public static final String JAVA_ANOTHER = "java_another";
public String getValue(String s) {
// return value based on key from mSettings
}
/** end of addendum to ConfigFactory **/
/**
* Invoked somewhere in the program
*/
// use of indirect reference to the "java_config" string literal
ConfigFactory.INSTANCE.getValue(ConfigFactory.JAVA_CONFIG);
这样可以保持ConfigFactory中包含的config属性,并删除对文字字符串名称的依赖( Solution 1 ),但现在ConfigFactory必须包含许多public static final String
声明,使堆内存占用空间更大,并且没有明确清楚我实际引用的是什么键。
我理解每种方法的优缺点。我不确定是否:
虽然这个问题直接引用properties
,但这个问题也适用于用于为Java程序建立基线的任何配置文件。