Получить строку перечисления без toString () - PullRequest
1 голос
/ 06 января 2012

Если у меня есть что-то вроде этого:

public enum Collection {
    Name, Type, All
}

И я бы тоже хотел использовать enumkey для строки. Я могу сказать Collection.Name.toString - это хорошо. Но я бы хотел сделать это без .toString Есть ли простое решение для этого? Я видел много вещей, но они были слишком большими с switch или с большим количеством if. Другого пути нет? Спасибо!

Редактировать: решение с Collection.something.name() хорошо. Но есть ли другой способ получить строку с Collection.something?

Ответы [ 5 ]

9 голосов
/ 06 января 2012

Используйте метод Enum name():

Collection.Name.name()
Collection.Type.name()
// etc

Редактировать:

Я не знаю, является ли это правильным решением, но это тоже сработает:

Collection.Name + ""
2 голосов
/ 06 января 2012

Похоже, вы ищете SMT как

enum Collection {
    Name("name"), Type("type"), All("all");
    String id;

    Collection(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}

или

enum Collection2 {
    Name, Type, All;
    private static final Map<Collection2, String> ids;

    static {
        ids = new HashMap<Collection2, String>();
        ids.put(Name, "name");
        ids.put(Type, "type");
        ids.put(All, "all");
        //here can be sam validation on id's uniq
    }

    public String getId() {
        return ids.get(this);
    }
}
1 голос
/ 06 января 2012

Единственный способ избежать этого - построить строку

.
"Collection type= " + Collection.Name.toString();
"Collection type= " + Collection.Name.name();
"Collection type= " + Collection.Name;

Все делают одно и то же, потому что он вызывает .toString() для вас.

Вы могли бы сделать

String text = "" + Collection.Name;
1 голос
/ 06 января 2012

Вы также можете использовать name (), но это сводится к тому же самому.

Это факт, что вы добавите немного дополнительной детализации в вашу программу (и это как раз то, что нужно Java, дополнительная детализация), но тот факт, что каждая запись вашего перечисления является объектом типа Collection, не дает вам больших рычагов.В некоторых сценариях вы можете полагаться на то, что toString будет вызываться неявно, но это ситуативное поведение, а не такая уж большая привычка.

0 голосов
/ 09 мая 2015

Это может быть странный обходной путь, но возможно использовать интерфейс с переменными String для достижения того, что вы собираетесь - если я вас правильно понимаю.Пример:

public interface myEnum {
    String Name = "Name";
    String Type = "Type";
    String All = "All";
}

Затем вызовите, как если бы вы перечислили:

if (myEnum.Name.equals("Name"))
    return true;

Это позволяет избежать добавления "toString ()" ко всему.

...