Метод values возвращает массив, содержащий константы перечислимого типа, а метод valueOf — константу того же типа, значение которой соответствует символьной строке str, передаваемой этому методу в качестве параметра. В обоих чаях перечислимый_тип обозначает тип используемого перечисления. Так, если воспользоваться рассмотренным выше перечислением Transport, то при вызове метода Transport .valueOf ("TRAIN") будет возвращено значение TRAIN типа Transport. Ниже приведен пример программы, демонстрирующий применение методов values и valueOf. // Применение встроенных в перечисление методов. // Перечисление разных видов транспорта, enum Transport { CAR, TRUCK, AIRPLANE, TRAIN, BOAT } class EnumDemo2 { public static void main(String args[]) { Transport tp; System.out.println("Here are all Transport constants"); // воспользоваться методом values // Получение массива констант типа Transport. Transport allTransports[] = Transport.values; for(Transport t : allTransports) System.out.println(t); System.out.println; // воспользоваться методом valueOf // Получение константы под названием AIRPLANE. tp = Transport.valueOf("AIRPLANE"); System.out.println("tp contains " + tp); } }
Выполнение этой программы дает следующий результат: Here are all Transport constants CAR TRUCK AIRPLANE TRAIN BOAT tp contains AIRPLANE
Обратите внимание на то, что в данном примере программы для перебора массива констант, полученного с помощью метода values , используется вариант for-each цикла for. Ради большей наглядности данного примера в его коде создается переменная allTransports, которой присваивается ссылка на массив констант перечислимого типа. Но делать это совсем не обязательно, а цикл for можно написать так, как показано ниже. В этом случае необходимость в дополнительной переменной allTransports отпадает. for(Transport t : Transport.values ) System.out.println(t);
Обратите также внимание на то, что значение, соответствующее имени AIRPLANE, было получено в результате вызова метода valueOf : tp = Transport.valueOf("AIRPLANE");
Как пояснялось выше, метод valueOf возвращает значение перечислимого типа, связанное с именем константы, которое передается в виде символьной строки при вызове этого метода. Конструкторы, методы, переменные экземпляра и перечисления
Следует иметь в виду, что каждая константа перечислимого типа является объектом этого же типа, а следовательно, в перечислении можно определить конструкторы, ввести методы и объявить переменные экземпляра. Если определить для объекта перечислимого типа enum конструктор, он будет вызываться при создании каждой константы этого типа. А каждая константа перечислимого типа позволяет вызвать любой метод, определенный в перечислении. И у каждой константы перечислимого типа имеется собственная копия любой переменной экземпляра, определенной в перечислении. Ниже приведен пример с новой версией перечисления Transport, демонстрирующий применение конструктора, переменной экземпляра и метода. Благодаря им появляется возможность определить обычную скорость передвижения различных транспортных средств. // Применение конструктора, переменной экземпляра и // метода в перечислении, enum Transport { // Обратите внимание на инициализирующие значения констант. CAR(65), TRUCK(55), AIRPLANE(600), TRAIN(70), BOAT(22); // Объявление переменной экземпляра. private int speed; // обычная скорость каждого транспортного средства // Объявление конструктора. Transport(int s) { speed = s; } // Определение метода. int getSpeed { return speed; } } class EnumDemo3 { public static void main(String args[]) { Transport tp; // отобразить скорость самолета // Скорость определяется с помощью метода getSpeed. System.out.println("Typical speed for an airplane is " + Transport.AIRPLANE.getSpeed + " miles per hour.\n"); // отобразить все виды транспорта и скорости их передвижения System.out.println("All Transport speeds: "); for(Transport t : Transport.values) System.out.println(t + " typical speed is " + t.getSpeedO + " miles per hour."); } }
Выполнение этой программы дает следующий результат: Typical speed for an airplane is 600 miles per hour. All Transport speeds: CAR typical speed is 65 miles per hour. TRUCK typical speed is 55 miles per hour. AIRPLANE typical speed is 600 miles per hour. TRAIN typical speed is 70 miles per hour. BOAT typical speed is 22 miles per hour.