Лучшая практика обратного просмотра Java enum

Я видел, предлагал в блоге , что следующее было разумным способом сделать " обратный поиск »с использованием getCode (int) в перечислении Java:

public enum Status {
    WAITING(0),
    READY(1),
    SKIPPED(-1),
    COMPLETED(5);

    private static final Map lookup 
            = new HashMap();

    static {
        for(Status s : EnumSet.allOf(Status.class))
            lookup.put(s.getCode(), s);
    }

    private int code;

    private Status(int code) {
        this.code = code;
    }

    public int getCode() { return code; }

    public static Status get(int code) { 
        return lookup.get(code); 
    }
}

Для меня статическая карта и статический инициализатор кажутся плохой идеей, и моей первой мыслью было бы закодировать поиск так:

public enum Status {
    WAITING(0),
    READY(1),
    SKIPPED(-1),
    COMPLETED(5);

    private int code;

    private Status(int code) {
        this.code = code;
    }

    public int getCode() { return code; }

    public static Status get(int code) { 
        for(Status s : values()) {
            if(s.code == code) return s;
        }
        return null;
    }
}

Есть ли очевидные проблемы с любым из методов, и есть ли рекомендуемый способ реализации такого поиска?

72
задан Armand 15 March 2011 в 18:30
поделиться