Что такое перечисление?
Перечисление - это новая функция, представленная JDK5. В некоторых случаях объект класса фиксирован и может быть определен как перечисление. В фактическом использовании типы перечисления также могут использоваться в качестве спецификации для обеспечения безопасности параметров программы. Перечисление имеет следующие характеристики:
java.lang.Enum в Java по умолчанию и реализует два интерфейса: java.lang.Seriablizable и java.lang.Comparable .public static final , и классы неабстрокта, классы перечисления не могут вывести подклассы. Здесь equals() в классе java.lang.Enum :
// это окончательно изменено, и подклассам не разрешено переписать публичный окончательный логический равен
Общие методы перечисления
int compareTo(E o)
Сравните порядок этого перечисления с указанным объектом. Когда объект меньше, равен или превышает указанный объект, отрицательные целые числа, нулевые или положительные целые числа возвращаются соответственно. Константы перечисления можно сравнить только с другими константами перечисления одного и того же типа перечисления.
// исходный код в Enum public final int compareto (e o) {enum ore = (enum) o; Enum self = это; if (self.getClass ()! = Другой.getClass () && // Оптимизация self.getDeclaringClass ()! = Другое.getDeclaringClass ()) бросить новый ClassCastException (); вернуть self.ordinal - shere.ordinal;} String name()
Возвращает имя этого экземпляра Enum.
static values()
Возвращает массив, содержащий все значения перечисления, которые можно использовать для итерации через все значения перечисления.
String toString()
Возвращает имя этого экземпляра Enum, то есть значение Enum. То же самое, что name() .
// name () и toString () в Enum public String toString () {return name;} public final String name () {return name;} int ordinal()
Возвращает значение индекса значения перечисления в классе enum (начиная с 0), то есть порядок значения перечисления в объявлении перечисления, что зависит от порядка объявления значения перечисления.
<T extends Enum<T>> valueOf()
Возвращает константу перечисления указанного типа перечисления с указанным именем, имя должно точно соответствовать идентификатору, используемому для объявления константы перечисления в этом типе (дополнительные символы пробелов не допускаются). Этот метод соответствует ToString, поэтому, если мы переопределяем метод toString() , мы должны переопределить метод valueOf() (мы можем переопределить метод toString() , но мы не можем переопределить метод valueOf() самим самим собой. Когда мы переопределяем метод toString() , метод valueOf() будет автоматически повторно, и нам не нужно платить за него.
Применение перечисления
Перечисление - это особый тип, и его использование очень похоже на использование обычных классов.
Заменить набор констант
public enum color {красный, зеленый, пустой, желтый} Используется в операторах переключения
// Switch добавлена поддержка Enum в JDK1.6 Enum Signal {зеленый, желтый, красный} ... Switch (Color) {case Red: color = signal.green; перерыв; } ... Добавить методы перечисления
public enum color {red ("red"), зеленый ("зеленый"), пустой ("белый"), hello ("желтый"); // Участничная переменная частная строка имени; // конструктор Private Color (String name) {this.name = name; } // Получить метод SET public String getName () {return name; } public void setName (string name) {this.name = name; }} Реализовать интерфейс
поведение публичного интерфейса {void print (); } public enum color реализует поведение {red ("red", 1), зеленый ("зеленый", 2), пустой ("белый", 3), Йелло ("Желтый", 4); // Метод интерфейса @Override public void print () {System.out.println (this.index+":"+this.name); }} Класс перечисления, содержащий абстрактные методы
Public Enum Operation {// Используется для выполнения операций с добавлением плюс {// часть скобки на самом деле является анонимным внутренним подклассом @Override Public Double Supply (Double X, Double Y) {return x + y; }}, // Используется для выполнения операций вычитания минус {// часть скобородок на самом деле является анонимным внутренним подклассом @Override public Double расчет (Double x, double y) {// todo Автогенерированный метод Заглушка return x - y; }}, // Используется для выполнения времен операций умножения {// Часть скобок на самом деле является анонимным внутренним подклассом @Override Public Double Dultulation (Double x, Double Y) {return x * y; }}, // Используется для выполнения операции деления Divide {// Часть Curly Braces на самом деле является анонимным внутренним подклассом @Override public Double Culdulate (Double x, Double y) {return x / y; }}; // Определите абстрактный метод для этого класса перечисления. Все значения перечисления в классе перечисления должны реализовать этот метод Public Abstract Double Cultulate (Double X, Double Y);} Внедрение синглтонов с перечислениями (лучшая практика для синглтонов)
выгода:
1. Используйте функции перечисления для реализации отдельных случаев
2. JVM обеспечивает безопасность нити
3. Атаки сериализации и рефлексии были разрешены путем перечисления
public enum singleton {экземпляр; public singleton getInstance () {// добавить этот метод, чтобы другие поняли, как его использовать, потому что этот метод реализации относительно редко. вернуть экземпляр; }} Другое использование перечисления
Перечисление
range(E from, E to)
Получите диапазон набора от значения перечисления.
для (день WeekDayEnum: enumset.range (WealdyEnum.Mon, WeekDayEnum.fri)) {System.out.println (Day); } of(E first, E... rest)
Создает набор перечисления, который первоначально содержит указанные элементы.
noneOf(Class<E> elementType)
Создает пустой набор перечисления с указанным типом элемента.
Enummap
EnumMap(Class<K> keyType)
Создает пустую карту перечисления с указанным типом ключа.
Карта <погода, строка> enummap = new enummap <погода, строка> (погода.
Перечисление в Android
Enum должен занять большое количество памяти. Если он чувствителен к памяти, попробуйте использовать Enum как можно меньше и замените его статической постоянной.
Однако, если вы не используете перечисление, возникнут некоторые риски безопасности, поэтому чиновник запустил две аннотации, которые можно проверить в течение периода компиляции для замены подсчета. Эти две аннотации: @intdef и @StringDef. Расположен в компиляции 'com.android.support: support-annotation :+'.
Пример использования
Использование @StringDef согласуется с @intdef. Здесь мы принимаем @intdef в качестве примера.
публичный интерфейс QrcodeType {int weChat = 0; int alipay = 1; @Intdef ({weChat, alipay}) @retention (streationpolicy.source) @target ({elementtype.field, elementtype.method, elementtype.parameter}) @Interface checker {}} public class QrCode { @QrcodeType.checker // define in the int in the int in the at in the int in the in trubbite in the in trubbit in the int in trubby in public void settype (@qrcodetype.checker int type) {// определить в параметре this.type = type; } @QrcodeType.checker // определить в методе (то есть, проверьте тип возврата) public int getType () {return Type; }} Рекомендации для использования
Наиболее широко используемый диапазон в разработке - использовать перечисления вместо набора статических констант. В этом случае вместо этого можно использовать приведенный выше метод аннотации.
Когда перечисление также содержит другие функции (например: включая другие определенные методы), оно не может быть заменено.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи поможет вашему обучению или работе. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения.