2012-11-19 37 views
1

有没有人有什么优越,EnumMapProperties的想法我使用的是第三方软件包,使用他们的方法,像这样我的代码和他们的应用程序之间的通信(在我的情况,或至少):EnumMap的VS属性

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?这个问题已经出现了,因为我试图构建一个根本不涉及第三方软件的测试框架,并且我试图找出一个好的,简单的方法来加载不使用任何3rd的参数第三方API调用,以及Properties文件似乎是一个简单的方法,这让我想知道我是否应该在主类中使用Properties

想法?

回答

1


枚举的好处是明确的:
它为您提供了枚举文字。您可以使用它们在编译级别捕捉“错误的关键”问题。
属性允许您灵活 - 例如 - 您可以从文件中读取它们。
最大的问题是 - 你有多确定由enum提供的文字集是固定的,并且不会改变?
例如,我们的系统有一组枚举值,因为我们是一个开源项目,所以我们希望在其上创建一个插件,理论上应该使用枚举值
但插件编写者会不能使用原始枚举,因为它有一组固定的文字,所以要么我们将枚举修改为属性对象,并让插件编写者注册它们的“文字”,或者我们必须提供一个补充系统我们的枚举。
对不起,我没有“清除”解决方案。

1

使用EnumMap和普通属性(也是引擎盖下的Map)之间的主要区别在于前者将强制允许存储在给定映射中的键的值,而属性将允许使用任何这些键的字符串。