Нужна помощь в настройке списков enum - PullRequest
0 голосов
/ 21 марта 2012

У меня есть общедоступное перечисление, как показано ниже:

   public enum stringList1 {
      string1,
      string2,
      string3,
      string4,
      string5,
   }

Это перечисление "stringList1" упоминается во всем коде более чем в 100 местах.В настоящее время у меня есть требование поддерживать список ниже.

    enum stringList2 {
          string1,
          string2,
          string6,
       }

На самом деле код должен выбирать либо stringList1, либо stringList2 в зависимости от условия.Я знаю, что перечисления не могут быть изменены, также очень трудно изменить весь код, чтобы поставить условие для выбора правильного списка перечислений.

Здесь рефакторинг не поможет, мне нужно выбрать либо stringList1, либо stringList2 во время выполнения, нов настоящее время stringList1 используется во всем коде.Один из вариантов - поместить условие во все места, куда stringList1 ссылается на указатель stringList1 или stringList2, но это очень сложно.

UseCase: это для обратной совместимости, stringList1 для текущей версии, скажем v2, stringList2 для v1,Данные могут управляться двоичным кодом V1 и двоичным кодом V2.В настоящее время, если пользователь пытается создать данные, используя двоичный файл V2, он создаст данные, которые не понимаются в V1.Таким образом, в двоичной версии 2 мне нужно проверить, если версия 1, мне нужно использовать stringList2, иначе stringList 1

Допустим, метод method1 (), который создаст некоторые предопределенные значения с помощью stringList1, здесь пользовательимеет доступ к method1 () не имеет доступа к значениям перечисления.так что пользователь просто вызывает method1, мне нужно найти версию, в зависимости от версии, я должен использовать stringList1 или stringList2, но проблема в том, что stringList1 используется во всем коде :( как Classname.stringList1.values ​​() или Classname.stringList1 во всем коде, для некоторой внутренней обработки

Посоветуйте, пожалуйста, как мне поступить в этом случае.

Заранее спасибо, Ашок

Ответы [ 4 ]

0 голосов
/ 21 марта 2012

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

public class Suit {
 private final String name;

 private Suit(String name);

 public static final Suit CLUBS = new Suit("clubs");
 public static final Suit DIAMONDS = new Suit("diamonds");
 public static final Suit HEARTS = new Suit("hearts");
 public static final Suit SPADES = new Suit("spades");

/*other code is what you need you need(either final Suit[] 
  or final unmodifiableList to store values*/
0 голосов
/ 21 марта 2012

В вашей IDE вы сможете использовать рефакторинг для переименования одного экземпляра и переименования только этого экземпляра (без изменения других перечислений)

0 голосов
/ 21 марта 2012

Если вам нужно хранить перечисления отдельно, т.е. не просто добавлять все значения вместе, вы можете заставить их реализовать интерфейс, например,

public interface stringListCommon {
}

public enum stringList implements stringListCommon {
  ..
}

public enum stringList2 implements stringListCommon {
  ..
}

Это позволит вам передавать эти перечисления вместе сте же методы.

0 голосов
/ 21 марта 2012

возможно, с помощью функции рефакторинга (из eclipse - я думаю, у netbeans и других тоже есть что-то подобное), и переименование может помочь

public enum stringList {
  stringList_string1,
  stringList_string2,
  stringList_string3,
  stringList_string4,
  stringList_string5,
}

public enum stringList2 {
      stringList2_string1,
      stringList2_string2,
      stringList2_ string6,
   }

надеюсь, это поможет вам:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...