Подтвердить что ты не робот

Перечисление Java с несколькими типами значений

В основном то, что я сделал, это написать перечисление для государств, и я хочу не только иметь доступ к ним, но и получить доступ к их аббревиатуре и независимо от того, была ли она исходной колонией.

public enum States {
        ...
        MASSACHUSETTS("Massachusetts",  "MA",   true),
        MICHIGAN("Michigan",            "MI",   false),
            ...; //so on and so forth for all fifty states

        private final Object[] values;

        States(Object... vals) {
            values = vals;
        }

        public String FULL() {
            return (String) values[0];
        }

        public String ABBR() {
            return (String) values[1];
        }

        public boolean ORIGINAL_COLONY(){
            return (boolean) values[2];
        }
    }

Кажется, это работает, как я ожидал. Я могу

System.out.println(States.ALABAMA);                  // Prints "ALABAMA"
System.out.println(States.ALABAMA.FULL());           // Prints "Alabama"
System.out.println(States.ALABAMA.ABBR());           // Prints "AL"
System.out.println(States.ALABAMA.ORIGINAL_COLONY());// Prints "false"

Для этого конкретного сценария, включающего перечисления, это лучший способ сделать это или есть лучший способ настроить и форматировать это перечисление? Спасибо всем заблаговременно!

4b9b3361

Ответ 1

Во-первых, методы перечисления не должны быть во всех кешках. Это методы, подобные другим методам, с тем же соглашением об именах.

Во-вторых, то, что вы делаете, - это не лучший способ настройки вашего перечисления. Вместо использования массива значений для значений вы должны использовать отдельные переменные для каждого значения. Затем вы можете реализовать конструктор, как и любой другой класс.

Вот как вы должны сделать это со всеми предложениями выше:

public enum States {
    ...
    MASSACHUSETTS("Massachusetts",  "MA",   true),
    MICHIGAN     ("Michigan",       "MI",   false),
    ...; // all 50 of those

    private final String full;
    private final String abbr;
    private final boolean originalColony;

    private States(String full, String abbr, boolean originalColony) {
        this.full = full;
        this.abbr = abbr;
        this.originalColony = originalColony;
    }

    public String getFullName() {
        return full;
    }

    public String getAbbreviatedName() {
        return abbr;
    }

    public boolean isOriginalColony(){
        return originalColony;
    }
}