1

さまざまな環境の構成値を格納するために、Java で Enum を使用したいと考えています。各 Enum には同じフィールドがありますが、値は異なります。何かのようなもの:

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

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

これは Web アプリケーション用であるため、単純にPreferencesまたは他のソリューションを使用することはできません。

私の質問は、構成のフィールドを定義するインターフェイスを作成する方法はありますか? または、これらの値を保存するclass代わりに法線を使用する必要がありますか?enum

編集:これを使用するには、他のクラスからこれを実行したいだけです:

String url = Config.URL

または

String url = Config.getURL();

Config.Developmentそれがまたはを参照しているかどうかを知らずにConfig.Production(Config enumのコンストラクター自体で決定し、適切なフィールドセットを選択させたい)

4

3 に答える 3

8

列挙型を誤用しています。

各列挙型メンバーは、物事をオーバーライドする匿名クラスとして実装できます。

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

    public abstract ...;
}
于 2013-02-05T04:07:09.497 に答える
2

次の方法で enum を使用することもできます。これにより、構成ごとに異なる値を保存 (および取得) できます。

    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;
    }
}
于 2013-02-05T04:25:35.683 に答える
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;
    }
}

列挙型を使用して値を検索する場合は、必要に応じてさまざまなタイプを実装するのではなく、列挙型をマップのキーとして使用することをお勧めします。

編集

これを実現するには、アプリケーションが実行されている環境内の場所(dev / prod /など)から.propertyファイルを読み込み、列挙型を使用してプロパティファイルにキー入力します。

//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);
}
于 2013-02-05T04:16:34.567 に答える