Рубрики
Без рубрики

Перечисления на Java – Изучение основ

Изучите основы перечисления, создав приложение светофора и ограничив ввод одним из трех цветов: красным, зеленым и желтым

Автор оригинала: Jimish Bhayani.

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

Перечисление – это не что иное, как особый тип класса. Скоро мы столкнемся с оправданием.

Итак, вот формальное определение: Java позволяет нам ограничить переменную, чтобы она содержала только определенное значение из списка предопределенных значений, то, что мы их называем, – это Перечисляемый список . Элементы, которые мы указываем в перечисленном списке, являются (удивительно) называется Перечисления .

Давайте рассмотрим перечисление на очень простом примере. Предположим , что мы создаем приложение Светофор , в котором мы будем принимать цвет света в качестве входных данных. В принципе, мы хотим ограничить ввод только одним из трех цветов, а именно: красный , зеленый и желтый .

Однако, если мы решим сохранить тип аргумента как String , пользователи смогут отправлять любое значение, и в вводимом значении не будет никаких желаемых ограничений. Предположим, что пользователь посылает сильный “Черный” в качестве цвета, тогда мы можем ожидать, что приложение выйдет из строя . Теперь мы можем сделать вывод, что строка в качестве типа входных данных будет плохим выбором здесь.

Итак, давайте посмотрим, как мы можем достичь этого с помощью перечисления.

public enum TrafficLightColor {
  RED,
  GREEN,
  YELLOW
}
 
public void changeLight (TrafficLightColor trafficLightColor) {
  this.currentLight = trafficLightColor;
}

Обратите внимание, что мы ограничили аргумент типом перечисления Цветом светофора . Поэтому мы можем сказать, что перечисление обеспечивает безопасность типа .

Поэтому единственно возможные вызовы вышеуказанного метода Индикатор изменений являются:

changeLight(TrafficLightColor.RED);
changeLight(TrafficLightColor.YELLOW);
changeLight(TrafficLightColor.GREEN);

Таким образом, мы можем сделать наш код менее подверженным ошибкам и без ошибок .

Перечисления может быть объявлено следующими упомянутыми возможными способами:

1. В независимом файле java (TrafficLightColor.java)

public enum TrafficLightColor {
  RED,
  GREEN,
  YELLOW
}
 
// Can be accessed as TrafficLightColor.RED

2. Внутри класса (TestOuter.java)

public class TestOuter {
  enum TrafficLightColor {
    RED,
    GREEN,
    YELLOW
  }
}

// Can be accessed as TestOuter.TrafficLightColor.RED;

Обратите внимание, что перечисления не могут быть объявлены в методе.

Теперь давайте посмотрим, что на самом деле происходит за сценой, когда мы создаем Перечисление .

Самое главное, что нужно помнить, это то, что Перечисления не являются строковыми или int ! Каждый из перечисленных типов цветов светофора на самом деле является экземпляром цвета светофора. Другими словами, КРАСНЫЙ цвет относится к типу Цвета светофора. Давайте обрамим тот же цвет Перечисления светофора, что и класс. Это выглядело бы примерно так:

class TrafficLightColor {
  public static final TrafficLightColor RED = new TrafficLightColor("RED", 0);
  public static final TrafficLightColor GREEN = new TrafficLightColor("GREEN", 1);
  public static final TrafficLightColor YELLOW = new TrafficLightColor("YELLOW", 2);
  
  TrafficLightColor(String enumName, int index){
    // some lines of code
  }
}

Используйте приведенный выше фрагмент только для понимания цели — фактическая внутренняя реализация перечислений может отличаться от того, что мы упомянули.

Приведенный выше фрагмент, однако, помог нам сделать еще несколько выводов о перечислениях:

  • Каждое из перечисленных значений КРАСНЫЙ , ЗЕЛЕНЫЙ и ЖЕЛТЫЙ является экземпляром класса Цвет светофора . Они представлены как статические и конечные, что в мире Java рассматривается как константа.

  • Каждое значение перечисления знает свой индекс или позицию. Таким образом, порядок, в котором объявляются значения перечисления, имеет значение. Это та же причина, по которой при повторении перечислений с помощью метода values() он будет повторяться в том же порядке, что и указано в его объявлении.

Я надеюсь, что мы вели себя хорошо и ясно. Мы подробнее рассмотрим практическую реализацию перечислений в моей будущей статье.

Если у вас есть какие-либо вопросы или предложения, не стесняйтесь обращаться ко мне на Codementor !

Оригинал: “https://www.codementor.io/@jimishbhayani/enums-in-java-exploring-the-basics-6drbjyraf”