3

私はJavaに非常に興味があり、次のように初めて列挙型を使用します。

    public class Web {
        public String baseUrl;
        public static enum Environment {

            DEVELOPMENT("http://development") ,
            PRODUCTION("http://production"),
            SANDBOX("http://sandbox");

            public final String baseUrl;

            private Environment(String baseUrl)
            {
                this.baseUrl = baseUrl;
            }
        }
    }

列挙型Environmentには、 、 、 の 3 つの定数DEVELOPMENTPRODUCTIONありSANDBOXます。Webクラスには、がbaseUrl設定される もありEnvironmentますbaseUrl(これが適切な方法かどうかはわかりません)。

を設定するために、baseUrl私は現在このようにやっています:

new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)

これがクラスで列挙型を使用する正しい方法かどうかはわかりません。Web baseUrlenumsに直接設定する方法はありますかbaseUrl

ここで何か不足していますか?

前もって感謝します

4

5 に答える 5

3

あなたは正しい方向に進んでいると思いますが、この方法で URL にアクセスすることにより、Java の enum の強みの一部が失われています。代わりに、列挙型を使用して、メソッドに正しい値を確実に渡すようにしてください。つまり、enum だけを渡し、メソッドに値を抽出させます。例えば:

new Web().setEnvironment(Web.Environment.PRODUCTION);

これで、古い文字列ではなく、環境のみを Web クラスに渡すことができます。

[編集] 次に、Web.setEnvironment メソッドは次のようになります。

public void setEnvironment(Environment environment) {
    this.baseUrl = environment.getBaseUrl();
}

new Web().setEnvironment("marvo")これで、偶然来て電話することはありません。一定レベルの正確性を強制します。

そしてvishal_aimは正しいです。列挙型であっても、データの隠蔽とカプセル化を実践する必要があるため、インスタンス変数を非公開にし、getBaseUrl() などのアクセサーを提供して値を取得します。

于 2012-12-13T07:24:56.597 に答える
2

Enum のメンバーを直接使用するのではなく、baseUrl非公開にして、enum クラスに getter メソッドを含める必要があります。それ以外は、このようにenumを使用しても問題ないと思います

于 2012-12-13T07:19:40.127 に答える
1

列挙型をトップレベルのクラス/列挙型にします。
baseUrl フィールドのゲッターを追加します。

于 2012-12-13T07:21:01.893 に答える
1

Enum の使い方に問題はないと思います。ただし、コードは少しぎこちなく見えます。

new Web().setBaseUrl(Web.Environment.PRODUCTION.baseUrl)

クラスから列挙型を取り出し、Webクラスの冗長な「baseUrl」フィールドを省略Webします。列挙型に値があるため、必要ありません。の代わりに、baseUrltype の urlType メンバーを使用しEnvironmentます。また、列挙型のbaseUrl内部にアクセサメソッドを追加するといいでしょうEnvironment

于 2012-12-13T07:26:32.717 に答える
0

Bohemian と vishal_aim が言ったことに加えて、baseUrl メンバー (またはリファクタリング後に getBaseUrl() メソッド) を不必要に公開している可能性があります。代わりに、列挙型を Web クラスに渡し、列挙型から URL を抽出します。そうすれば、enum を Web クラス内に保持すると、baseUrl をプライベートに保つことができます。

public void setEnvironment(Environment env) {
    baseUrl = env.getBaseUrl();
    ....
}
于 2012-12-13T07:27:02.943 に答える