Рубрики

enum in Java

Перечисления служат для представления группы именованных констант в языке программирования. Например, 4 масти в колоде игральных карт могут быть 4 счетчиками с именами Club, Diamond, Heart и Spade, принадлежащих к перечисляемому типу с именем Suit. Другие примеры включают в себя естественные перечисляемые типы (такие как планеты, дни недели, цвета, направления и т. Д.).
Перечисления используются, когда мы знаем все возможные значения во время компиляции , такие как выбор в меню, режимы округления, флаги командной строки и т. Д. Нет необходимости, чтобы набор констант в типе enum оставался фиксированным на все время.

В Java (начиная с 1.5) перечисления представлены с использованием типа данных enum . Перечисления Java являются более мощными, чем перечисления C / C ++ . В Java мы также можем добавлять переменные, методы и конструкторы. Основная цель enum — определить наши собственные типы данных (перечислимые типы данных).

Объявление enum в Java:

  • Объявление enum может быть сделано вне класса или внутри класса, но не внутри метода.

    // Простой пример enum, где enum объявлен
    // вне любого класса (обратите внимание на ключевое слово enum вместо
    // ключевое слово класса)

    enum Color

    {

        RED, GREEN, BLUE;

    }

      

    public class Test

    {

        // Метод драйвера

        public static void main(String[] args)

        {

            Color c1 = Color.RED;

            System.out.println(c1);

        }

    }

    Выход :

    RED

    // объявление enum внутри класса.

    public class Test

    {

        enum Color

        {

            RED, GREEN, BLUE;

        }

      

        // Метод драйвера

        public static void main(String[] args)

        {

            Color c1 = Color.RED;

            System.out.println(c1);

        }

    }

    Выход :

    RED
  • Первая строка внутри enum должна быть списком констант, а затем другими вещами, такими как методы, переменные и конструктор.
  • В соответствии с соглашениями об именах Java рекомендуется именовать константу заглавными буквами

Важные пункты перечисления:

  • Каждое перечисление внутренне реализовано с использованием класса.
    /* internally above enum Color is converted to
    class Color
    {
         public static final Color RED = new Color();
         public static final Color BLUE = new Color();
         public static final Color GREEN = new Color();
    }*/
    
  • Каждая константа enum представляет объект типа enum.
  • Тип enum может быть передан в качестве аргумента для оператора switch .

    // Java-программа для демонстрации работы над enum
    // в случае переключения (Filename Test. Java)

    import java.util.Scanner;

      
    // класс Enum

    enum Day

    {

        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,

        THURSDAY, FRIDAY, SATURDAY;

    }

      
    // Класс драйвера, который содержит объект "день" и
    // основной().

    public class Test

    {

        Day day;

      

        // Конструктор

        public Test(Day day)

        {

            this.day = day;

        }

      

        // Печатает строку о Дне, используя переключатель

        public void dayIsLike()

        {

            switch (day)

            {

            case MONDAY:

                System.out.println("Mondays are bad.");

                break;

            case FRIDAY:

                System.out.println("Fridays are better.");

                break;

            case SATURDAY:

            case SUNDAY:

                System.out.println("Weekends are best.");

                break;

            default:

                System.out.println("Midweek days are so-so.");

                break;

            }

        }

      

        // Метод драйвера

        public static void main(String[] args)

        {

            String str = "MONDAY";

            Test t1 = new Test(Day.valueOf(str));

            t1.dayIsLike();

        }

    }

    Выход:

    Mondays are bad.
    
  • Каждая константа перечисления всегда является неявно публичной статической конечной . Поскольку он статический , мы можем получить к нему доступ, используя enum Name. Поскольку он является окончательным , мы не можем создавать дочерние перечисления.
  • Мы можем объявить метод main () внутри enum. Следовательно, мы можем вызвать enum напрямую из командной строки.

    // Java-программа для демонстрации того, что мы можем иметь
    // main () внутри класса enum.

    enum Color

    {

        RED, GREEN, BLUE;

      

        // Метод драйвера

        public static void main(String[] args)

        {

            Color c1 = Color.RED;

            System.out.println(c1);

        }

    }

    Выход :

    RED

Перечисление и Наследование:

  • Все перечисления неявно расширяют класс java.lang.Enum . Поскольку класс может расширять только один родительский элемент в Java, то перечисление не может расширять что-либо еще.
  • Метод toString () переопределяется в классе java.lang.Enum , который возвращает имя константы enum.
  • enum может реализовать много интерфейсов.

методы values (), ordinal () и valueOf ():

  • Эти методы присутствуют внутри java.lang.Enum .
  • Метод values () может быть использован для возврата всех значений, присутствующих в enum.
  • Порядок важен в перечислениях. Используя метод ordinal () , каждый индекс константы перечисления может быть найден так же, как индекс массива.
  • Метод valueOf () возвращает константу перечисления указанного строкового значения, если оно существует.

    // Java-программа для демонстрации работы значений (),
    // ordinal () и valueOf ()

    enum Color

    {

        RED, GREEN, BLUE;

    }

      

    public class Test

    {

        public static void main(String[] args)

        {

            // Вызов значений ()

            Color arr[] = Color.values();

      

            // enum with loop

            for (Color col : arr)

            {

                // Вызов ordinal () для поиска индекса

                // цвета.

                System.out.println(col + " at index "

                                 + col.ordinal());

            }

      

            // Использование valueOf (). Возвращает объект

            // Цвет с заданной константой.

            // Раскомментирование второй строки вызывает исключение

            // IllegalArgumentException

            System.out.println(Color.valueOf("RED"));

            // System.out.println (Color.valueOf ("WHITE"));

        }

    }

    Выход :

    RED at index 0
    GREEN at index 1
    BLUE at index 2
    RED

enum и конструктор:

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

enum и методы:

  • enum может содержать как конкретные методы, так и абстрактные методы. Если у класса enum есть абстрактный метод, то каждый экземпляр класса enum должен его реализовывать

// Java-программа для демонстрации того, что перечисления могут иметь конструктор
// и конкретные методы.

  
// Перечисление (обратите внимание на ключевое слово enum вместо ключевого слова class)

enum Color

{

    RED, GREEN, BLUE;

  

    // конструктор enum вызывается отдельно для каждого

    // константа

    private Color()

    {

        System.out.println("Constructor called for : " +

        this.toString());

    }

  

    public void colorInfo()

    {

        System.out.println("Universal Color");

    }

}

  

public class Test

{    

    // Метод драйвера

    public static void main(String[] args)

    {

        Color c1 = Color.RED;

        System.out.println(c1);

        c1.colorInfo();

    }

}

Выход:

Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color

Следующая статья на enum:
Перечисление с настроенным значением в Java

Эта статья предоставлена Гауравом Миглани . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

enum in Java

0.00 (0%) 0 votes