- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
private enum FolderType{inbound, outbound, archive, rejected}
private String inboundName = "inbound";
private String outboundName = "outbound";
private String archiveName = "archive";
private String rejectedName = "rejected";
// чуть ниже....
private String getFolderTypeName(FolderType type){
switch (type){
case inbound:
return inboundName;
case outbound:
return outboundName;
case archive:
return archiveName;
case rejected:
return rejectedName;
default:
throw new IllegalArgumentException(type.toString());
}
}
Если нужно сконфигурить в рантайме (что в моём случае не подразумевается), то решение в топике сойдёт.
Не держи знания в себе или чё у тебя там
Считаю некорректным енумы C# и C++ называть похожими. Разница между ними огромная. Этак можно выделение памяти в C++ и C# считать одинаковым: хули, оператор new и там, и там!
Я бы прошёл мимо такого сообщения, лишь хмыкнув, если бы его сделал кто-то другой. Но Роман отличается хорошей аргументацией своего мнения, поэтому я счёл правильным обратить его внимание на полную несостоятельность данного поста.
Схожесть енумов в C# и в C++ в том, что в конечном счёте они интерпретируются как целые числа. Из MSDN: "все ссылки на отдельные значения перечисления преобразуются в числовые литералы во время компиляции".
В Java енумы кардинально отличаются. Там экземпляр перечисления - это финальный наследник абстракного класса. Енумы в Java могут реализовывать интерфейсы (но не могут расширять классы, поскольку в таком случае получается множественное наследование), содержать поля произвольных типов. Они нацелены на удобное и безопасное расширение вариантов числа вариантов без поломки функционала системы.
Т.е. в этом контексте енумы C# гораздо ближе по природе к енумам C++, чем к енумам Java.
Однако, изучая наработки .NET в плане енумов в версии 3.5 вынужден с вами согласиться. Действительно, в C# система перечислений сделала большой шаг в перёд по сравнению с C++-аналогами.
Сейчас ещё придёт defecate-cpp, ткнёт меня носом в буст и скажет, что я не знаю енумов C++
А я жду, что кто-нибудь из сиплюсистов начнёт рассказывать про достоинства enum из C++11. :)
И, например, чтобы взять следующий элемент перечисления недостаточно прибавить единицу.
Таки в Аде покруче будет http://en.wikibooks.org/wiki/Ada_Programming/Types/Enumeration
в с++11 наконец то приняли давнее предложение осовременить это барахло
и таки да, в бусте кое-что есть для решения этих проблем, и даже для эмуляции
inbound("inbound"), outbound("outbound"),
archive("archive"), rejected("rejected"),
но оно даже не в основной ветке буста
в общем я конечно посмотрел, но не пользовался - т.к. в целом проблема олдскульных енумов малокритична
Для рантайма — EnumMap.
Это паттернизм прочно засел в голову.