0

この質問は、特定の悪いプログラミング手法に関するものです。それについて説明し、なぜそれが悪いのかを説明する良い記事を探しています。残念ながら、私はこの慣行の名前や専門用語を知りません。そのため、代わりにそれを説明して、どのように呼ばれているか教えてください。また、このテーマに関する優れた記事を参照してください。

いくつかの列挙型があるとします:

public enum Day
{
    SUNDAY, MONDAY, ...
}

次に、サーバー側のプログラマーが数値の ID を各日に付けたとします。もちろん、正しいことは、サーバー側のコード内でのみ定義および使用される を使用して、それぞれDayをにマップすることです。代わりに、彼は共通コードを台無しにして、メソッドを追加します。IntegerEnumMapgetId()

public enum Day
{
    SUNDAY {public int getId() {return 100;}},
    MONDAY {public int getId() {return 101;}},
    ...;

    public abstract int getId();
}

次に、GUI プログラマーは毎日に文字列を付けたいので、独自のものを追加します。

public enum Day
{
    SUNDAY {
        public int getId() {return 100;}
        public String getName() {return "sunday";}
    },
    MONDAY {
        public int getId() {return 101;};
        public String getName() {return monday";}
    },
    ...;

    public abstract int getId();
    public abstract String getName();
}

あなたはポイントを得る...

このことをなんと呼びますか?それについての良い記事を知っていますか?

4

1 に答える 1

7

必要以上に冗長であることを除けば、これが悪い理由はわかりません。それを次のように置き換えることができます:

public enum Day {
    SUNDAY(0, "sunday"),
    MONDAY(1, "monday"),
    TUESDAY(2, "tuesday"),
    WEDNESDAY(3, "wednesday"),
    THURSDAY(4, "thursday"),
    FRIDAY(5, "friday"),
    SATURDAY(6, "saturday");

    private final int mIndex;
    private final String mName;

    Day (int index, String name) {
        mIndex = index;
        mName = name;
    }

    public int getIndex () {
        return mIndex;
    }

    public String getName () {
        return mName;
    }

    public static Day fromIndex (int index) {
        if (index < 0 || index > 6) {
            throw new IllegalArgumentException(index + " is not a valid day index.");
        }

        Day result = null;

        for (Day day : values()) {
            if (day.mIndex == index) {
                result = day;
                break;
            }
        }

        return result;
    }
}

私はこのパターンを、整数として返される Web サービスからデータを収集するために頻繁に使用します。を使用するよりも確実に良い方法ですDay.ordinal()。列挙型内の定義の順序が重要になり、インデックスが連続している必要があるためです。

于 2013-09-08T19:06:05.240 に答える