Поиск по этому блогу

воскресенье, 17 февраля 2013 г.

Создаем свой enum на Java


Когда мы сталкиваемся с задачей создания списка заранее предопределенных элементов, то скорее всего необходимо будет создать перечисление - в java перечисление называется enum. Например, перечислением или enum'ом может быть список состояний груза в перевозке  - Доступен, В перевозке, Доставлен и Подтвержден. Для того, чтобы объекту груз можно было устанавливать в каком именно состоянии он сейчас находится, необходимо создать свой enum, в котором будут перечислены эти состояния. В Java 6 создавать свои энумераторы очень просто. Как это сделать я раскажу далее в этой статье.

1. Создаем простой enum

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

public enum CargoStatus {
 AVAILABLE, IN_TRUKING, DELIVERED, CONFIRMED;
}

2. Создаем enum c полями.

Для того, чтобы элемент энумератора содержал в себе какие-то поля необходимо в энумераторе описать поля и установить их в конструкторе и описать в самом элементе. Для получения от элемента энумератора значений этих полей нужно создать соответствующие get- методы. Сначала описываем сам элемент энумератора, а в скобочках значения полей этого элемента. В конструкторе устанавливаем эти значения полям энумератора. Ниже приведен пример простого энумератора с одним полем.

public enum CargoStatus {
 AVAILABLE("Доступен"), 
 IN_TRUKING("В перевозке"), 
 DELIVERED("Доставлен"), 
 CONFIRMED("Подтверждено");
 
 private String value;
 
 private CargoStatus(String value) {
  this.value = value;
 }
 
 public String getValue() {
  return value;
 }
}

Можно сделать энумератор с несколькими полями.

public enum CargoStatus {
 AVAILABLE(1, "Доступен"), 
 IN_TRUKING(2, "В перевозке"), 
 DELIVERED(3, "Доставлен"), 
 CONFIRMED(4, "Подтверждено");
 
 private int id;
 private String value;
 
 private CargoStatus(int id, String value) {
  this.id = id;
  this.value = value;
 }
 
 public String getValue() {
  return value;
 }
 
 public int getId() {
  return id;
 }
}

3. Пример использования созданного enum'a

Созданный нами enum будет использоваться как поле в классе Cargo (класс для сущности груз).

@Cache
@Entity
public class Cargo extends BaseEntity {
 
        ...
 
 private String volume;
 private String weight;
 private CargoStatus status;
 
        ...
}

Ниже приведен пример использования нашего энумератора - тут мы устанавливаем объекту груз поле status равным DELIVERED, то есть Доставлен.

public void completeTransportation(Long transportationId, Integer rating) {
 ...
        Cargo transportation = dao.retrieve(transportationId, false);
 transportation.setDeliveredDate(new Date());
 transportation.setStatus(CargoStatus.DELIVERED);
 dao.edit(transportation);
        ...
}

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

Отправить комментарий