有没有人对什么是优越的、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
。
思潮?
枚举的好处很明显:
它为您提供了枚举文字。您可以使用它们在编译级别捕获"错误键"问题。
属性允许您灵活 - 例如 - 您可以从文件中读取它们。
最大的问题是 - 你有多确定枚举提供的文字集是固定的,并且不会改变?例如,我们的系统有一组枚举值,
由于我们是一个开源项目,我们希望在其上构建一个理论上应该使用枚举值的插件,
但是插件编写者将无法使用原始枚举,因为它有一组固定的文字, 因此,要么我们将枚举修改为属性对象,并让插件编写者注册它们的"文字",
要么我们必须为枚举提供一个补充系统。
很抱歉,我在这里没有"明确"的解决方案。
使用EnumMap 和普通属性(也是底层的 Map)之间的主要区别在于,前者将强制执行可以存储在给定映射中的键的允许值,而属性将允许对这些键使用任何字符串。