如何在界面中使用Java ENUM?

时间:2013-02-05 04:05:12

标签: java enums

我想在Java中使用Enum来存储不同环境的配置值。每个枚举将具有相同的字段,但值不同。类似的东西:

public enum DevelopmentConfig
{
   URL("..."),
   defaultURL(".....");
}

public enum ProductionConfig
{
   URL("..."),
   defaultURL(".....");
}

这适用于Web应用程序,因此我不能简单地使用Preferences或任何其他解决方案。

我的问题是,有没有办法创建一个界面来定义配置的字段?或者我应该使用普通class代替enum来存储这些值吗?

编辑:要使用此功能,我只想在其他课程中执行此操作:

String url = Config.URL

或者

String url = Config.getURL();

不知道是否引用Config.DevelopmentConfig.Production(我希望在Config枚举的构造函数中确定它并让它选择正确的字段集)

3 个答案:

答案 0 :(得分:8)

你在滥用枚举。

每个枚举成员都可以实现为覆盖事物的匿名类:

public enum Config {
    DEVELOPMENT {
        @Override
        ...
    },
    PRODUCTION {
        @Override 
        ...
    };

    public abstract ...;
}

答案 1 :(得分:2)

您还可以通过以下方式使用枚举。使用此功能,您可以为每个配置存储(和检索)不同的值

    public enum Config{
        DEVELOPMENT("DEV_URL", "DEV_DEFAULT_URL"), 
        PRODUCTION("PROD_URL", "PROD_DEFAULT_URL");

    private String url;

    private String defaultURL;

    Config( String url, String defaultURL )
    {
        setUrl(url);
        setDefaultURL(defaultURL);
    }

    public String getUrl()
    {
        return url;
    }

    public String getDefaultURL()
    {
        return defaultURL;
    }

    public void setDefaultURL( String defaultURL )
    {
        this.defaultURL = defaultURL;
    }

    public void setUrl( String url )
    {
        this.url = url;
    }
}

答案 2 :(得分:1)

枚举的每个成员都是枚举类的一个实例。这意味着您可以定义方法,变量和实现接口:

public interface Config {
    String getKey();
}

public enum DevelopmentConfig implements Config
{
    URL("url"),
    DEFAULT_URL("defaulturl");

    private String key;

    private DevelopmentConfig(String key){
        this.key = key;
    }

    public String getKey(){
        return this.key;
    }
}

如果您希望使用枚举来查找值,我建议您将它们用作Map中的键,而不是根据需要实现不同的类型。

修改

您可以通过从运行应用程序的环境中的某个位置读取.property文件来完成此操作(dev / prod / etc),然后使用枚举键入属性文件:

//This has reads in a property file:
PropertyManager propertyManager = new PropertyManager(/*prop file location*/);

String url = propertyManager.getConfig(DevelopmentConfig.URL);

PropertyManager的API如下所示:

PropertyManager {
    String getConfig(Config config);
}