Как я могу найти перечисление Java по его строковому значению?

Реализации используют подсчет ссылок, чтобы определить, когда нужно удалить переменную.

После того, как переменная выходит за пределы области видимости (как в вашем примере), если на ней нет других ссылок, тогда память будет освобождена.

def a():
    x = 5 # x is within scope while the function is being executed
    print x

a()
# x is now out of scope, has no references and can now be deleted

Кроме клавиш словаря и элементы в списках, как правило, очень мало причин вручную удалять переменные в Python.

Хотя, как сказано в ответах на , этот вопрос , использование del может быть полезно, чтобы показать намерение .

141
задан nbro 22 May 2015 в 03:38
поделиться

3 ответа

Используйте метод valueOf , который автоматически создается для каждого Enum.

Verbosity.valueOf("BRIEF") == Verbosity.BRIEF

Для произвольных значений начинайте с:

public static Verbosity findByAbbr(String abbr){
    for(Verbosity v : values()){
        if( v.abbr().equals(abbr)){
            return v;
        }
    }
    return null;
}

Переходите к реализации карты позже, только если ваш профилировщик говорит вам об этом.

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

217
ответ дан 23 November 2019 в 22:46
поделиться

И вы не можете использовать valueOf () ?

Изменить: Кстати, ничто не мешает вам использовать static {} в перечислении.

6
ответ дан 23 November 2019 в 22:46
поделиться

Вы близко. Для произвольных значений попробуйте что-то вроде следующего:

public enum Day { 

    MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"),
    THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ;

    private final String abbreviation;

    // Reverse-lookup map for getting a day from an abbreviation
    private static final Map<String, Day> lookup = new HashMap<String, Day>();

    static {
        for (Day d : Day.values()) {
            lookup.put(d.getAbbreviation(), d);
        }
    }

    private Day(String abbreviation) {
        this.abbreviation = abbreviation;
    }

    public String getAbbreviation() {
        return abbreviation;
    }

    public static Day get(String abbreviation) {
        return lookup.get(abbreviation);
    }
}
127
ответ дан 23 November 2019 в 22:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: