Как создать геттеры и сеттеры для перечисления

#java #enums #getter-setter #pojo

#Ява #перечисления #геттер-сеттер #пожо

Вопрос:

 public enum EventTypeName {  MAIN_EVENT(new MainEvent()),  MAIN_ADJUSTMENT_EVENT(new MainAdjustmentEvent()),  CUSTOMER_EVENT(new CustomerEvent()),  EventType eventType;   private EventTypeName(EventType eventType)  {  this.eventType = eventType;  }   public EventType getEventType()  {  return eventType;  } }  

Мне нужно создать геттеры, геттеры и сеттеры для всех новых событий, которые будут объявлены в перечислении.

Комментарии:

1. Вы уже успешно это сделали. При первой загрузке класса перечисления будет создан экземпляр каждого из именованных объектов. В рамках этого создания новый субъект, который предположительно является подклассом EventType , будет сохранен в названном поле участника eventType . (Кстати, вы, возможно, захотите создать это поле private .) И у вас есть метод получения для извлечения этого EventType объекта. EventType et = EventTypeName.CUSTOMER_EVENT.getEventType() ; Так в чем же ваш вопрос?

2. Это не должно быть таким образом MAIN_EVENT(новое событие()), MAIN_ADJUSTMENT_EVENT(новое событие()), CUSTOMER_EVENT(новое событие()), Они должны создаваться автоматически при вызове от других, и объект должен быть назначен @BasilBourque

3. Вы не можете динамически создавать enum экземпляры. перечисление можно использовать только в том случае, если во время компиляции известно, какие существуют экземпляры / значения.

4. Можем ли мы сделать это каким-либо другим способом, чтобы он создавался динамически. Мое требование состоит в том, чтобы заставить его создавать динамически

5. Вы имеете в виду, что хотите, чтобы каждый вызов getEventType метода возвращал новый экземпляр одного из трех подклассов? Если это так, то это возможно, но, скорее всего, это плохое использование перечисления.

Ответ №1:

Очевидно, вы хотите создать новый подкласс EventType для каждого из различных объектов перечисления при getEventType вызове метода.

В этой ситуации не называйте свой метод get префиксом. В широко используемых соглашениях JavaBeans такой префикс указывает вспомогательный метод для извлечения свойства объекта. Учитывая ваши намерения, префикс new или make может быть более подходящим.

  public enum EventTypeName {  MAIN_EVENT , MAIN_ADJUSTMENT_EVENT , CUSTOMER_EVENT ;   // Assumes MainEvent, MainAdjustmentEvent, and CustomerEvent are all subclasses of EventType.   public EventType makeEventType()  {  if ( this.equals( MAIN_EVENT ) ) { return new MainEvent() ; }  if ( this.equals( MAIN_ADJUSTMENT_EVENT ) ) { return new MainAdjustmentEvent() ; }  if ( this.equals( CUSTOMER_EVENT ) ) { return new CustomerEvent() ; }  } }  

Использование.

 EventType eventType = EventTypeName.MAIN_ADJUSTMENT_EVENT.makeEventType() ;  

У меня возникает тревожное чувство, когда я смотрю на ваш код, подозревая плохой или неправильный дизайн. Вероятно, из-за неправильного понимания перечислений на Java. Перечисление не следует рассматривать как коллекцию. Вы не можете определить дополнительные объекты перечисления во время выполнения; они определяются во время компиляции.

Комментарии:

1. В этом случае, если новое событие представлено как публичное событие, а класс для него создан как PublicEvent. Для этого мне нужно создать экземпляр нового объекта, но он должен быть не из этого перечисления, а из того места, где мы называем это перечисление

2. @Fahd Я понятия не имею, что ты имеешь в виду.

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

4. @Fahd Я подозреваю, что вы неправильно понимаете роль перечислений в Java. Прочитайте последние два предложения моего пересмотренного ответа. Если вы хотите изменить набор объектов во время выполнения, не используйте перечисления, используйте коллекцию.

5. Это прекрасно подходит для любой концепции. Могу я узнать, как я могу решить свои требования в любой концепции @Basil Bourque