Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > enum своими руками


Автор: rapik 9.9.2008, 12:16
Столкнулся с проблемой - в Java 1.4 нет enum. 

Выбирал между эмуляцией с помощью числовых констант и с помощью глобальных объектов. Выбрал второе. Правильно ли это? 

Из плюсов я заметил возможность удобно использовать toString() и невозможность присваивать неразрешённые значения (с числовыми константами такое проходит).

Было (>=1.5):
Код

public enum DBType
  {
    ORACLE("Oracle"),
   
    MAX_DB("Max DB");

    private String name;

    private DBType(String pName)
      {
        name = pName;
      }
    
    public String toString()
      {
        return name;
      }
  }

Стало (>=1.3):
Код

public final class DBType
  {
    public static final DBType ORACLE = new DBType("Oracle");

    public static final DBType MAX_DB = new DBType("Max DB");

    private String             name;

    private DBType(String pName)
      {
        name = pName;
      }

    public String toString()
      {
        return name;
      }
  }

Автор: AntonSaburov 9.9.2008, 13:32
Ну развивается язык - это хорошо. Тем более, что 1.4 наверно надо вытеснять из своего репертуара smile

Автор: AndrewMormysh 9.9.2008, 15:37
Может я говорю глупость.. но зачем изобретать велосипед? - возьми готовый класс java.lang.Enum из jdk 1.5 и добавь себе в проект smile

Автор: rapik 9.9.2008, 16:34
Цитата(AndrewMormysh @ 9.9.2008,  15:37)
возьми готовый класс java.lang.Enum из jdk 1.5 и добавь себе в проект smile

Попробовал, не вышло - типовые параметры только с версии 1.5. 

К тому же не очень понял, как потом декларировать значения. 

Автор: AndrewMormysh 9.9.2008, 17:24
Довольно любопытная запись в блоге: http://www.javenue.info/post/73

Автор: LSD 10.9.2008, 14:35
У Jakarta Commons Lang есть уже готовые классы для реализации своих enum-ов. 

Хотя при желании Enum из 1.5 переносится в 1.4. Надо:
- скомпилировать свои классы компилятором из 1.5 с параметром -target jsr14 (возможно еще -source придется указать)
- аналогично скомпилировать класс Enum и упаковать в jar
- положить jar-ник с скомпилированным Enum-ом в <JRE14_HOME>\lib\endorsed
аналогично можно использовать генерики, автобоксинг и foreach циклы (для foreach нужно скомпилировать интерфейс Iteratable).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)