-3

enumいつ遭遇したのか理解できませんEnum<Type>。通常、列挙型は別のクラスまたはクラスメンバーとして使用します。

a)列挙型を別のクラスまたはクラスメンバーとして宣言する理由と利点は何ですか? 誰でも説明できますか?

b)Enum<Type>を使用する代わりに拡張するのはenumいつですか? を拡張する利点は何ですかEnum<Type>

私はたまたまandのメソッドに対処する質問に出くわしましたが、それは非常に一般的です。valueOf()enumEnum<Type>

私はOracleのドキュメントを調べましたが、それは列挙型の力を説明していません.少なくとも私が探していた情報は見つかりませんでした.

誰かが草の根レベルで列挙型を説明する例またはドキュメントを教えてくれれば、それは素晴らしいことです。

編集:質問をより明確にしました。トピックをより関連性の高いものに変更しました。

4

3 に答える 3

2

enum の使い方と enum をいつ使うかを知っていれば、enum は非常に強力です。

ケース 1: 文字列定数値があり、それらを比較する場合。

列挙型がどのように役立つか: すべての文字列の列挙型をクレートし、文字列比較 emum のインストレッドを作成します。列挙型は数値であるハッシュ値に基づいて比較するため、文字列比較よりも高速です。

Oracle のドキュメントに示されているように、彼らは日曜日、月曜日を文字列ではなく列挙型として使用していました。

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

ケース 2: 定数が必要で、他の定数の値が結果に基づいているため、定数を比較する必要がある場合。たとえば。月の名前があり、月の名前に基づいて、そこに何日あるかを取得し、この場合、列挙型が非常に役立ちます。

たとえば。

enum MonthEnum {
    JAN("Jan", 31, "Sunday"), Feb("Feb", 28, "Tuesday"), March("March", 28, "Monday");

    private final String monthName;
    private final int noOfDays;
    private final String startDay;

    private MonthEnum(final String monthName, final int noOfDays, final String startDay) {
        this.monthName = monthName;
        this.noOfDays = noOfDays;
        this.startDay = startDay;
    }

    public String getMonthName() {
        return monthName;
    }

    public int getNoOfDays() {
        return noOfDays;
    }

    public String getStartDay() {
        return startDay;
    }
}

monthNameのみを渡すことで簡単に列挙型を取得できます

public static MonthEnum getMonthEnum(final String monthName) {
        MonthEnum month = null;
        for(MonthEnum monthEnum : MonthEnum.values()) {
            if(monthEnum.getMonthName().equalsIgnoreCase(monthName)) {
                month = monthEnum;
            }
        }
        return month;
    }
于 2013-06-19T10:50:26.057 に答える