有没有人想过什么是优越的,EnumMap
或Properties
(或至少在我的情况下?)我正在使用第三方软件包,使用他们的方法在我的代码和他们的应用程序之间进行通信像这样:
TheirRuntime.getInstance().getParameter(String paramName)
目前我创建了一个enum
,其工作原理如下:
public enum MyEnum {
FOO_BAR ("fooBar"), BAZ_QUUX ("bazQuux");
private final String varName;
private MyEnum(String varName) {
this.varName = varName();
}
public String varName() {
return varName();
}
}
然后我将值存储在EnumMap<MyEnum, Double>
中,当用户更改内容时会更新这些值。我的架构稍微复杂一点,但为了SSCCE,我省略了一些细节。虽然我会提到我用以下内容加载值:
for (MyEnum me : MyEnum.values()) {
TheirRuntime.getInstance().getParameter(me.varName());
}
我想知道的是,使用Properties
会更有意义吗?这个问题已经出现,因为我正在尝试构建一个完全不涉及第三方软件的测试框架,而我正试图找到一个好的,简单的方法来加载不使用任何第三方的参数派对API调用,Properties
文件似乎是一个简单的方法,这让我想知道我是否应该在主类中使用Properties
。
思想?
答案 0 :(得分:2)
Enum的好处很明显:
它为您提供枚举文字。您可以使用它们在编译级别捕获“错误的密钥”问题。
属性允许您灵活 - 例如 - 您可以从文件中读取它们。
最大的问题是 - 你有多确定枚举提供的文字集是固定的,而且不会改变?
例如,我们的系统有一组枚举值,因为我们是一个开源项目,我们想在它上面构建一个理论上应该使用枚举值的插件,
但插件编写者将无法使用原始枚举,因为它有一组修复文字,所以要么我们将枚举修改为属性对象,要让插件编写者注册他们的“文字”,
或者我们必须为我们的枚举提供补充系统。
对不起,我这里没有“明确的”解决方案。
答案 1 :(得分:1)
使用EnumMap和普通属性(也是引擎盖下的Map)之间的主要区别在于前者将强制允许存储在给定映射中的键的值,而Properties将允许使用任何字符串对于那些钥匙。