О перечислении
Большинству перечислений, написанных в местах, дается перечисление, а затем пример начинает переключаться. Но я хочу сказать, что данные из моего кода вряд ли будут перечисления, обычно строки или числа. Например, после анализа SQL я сначала определяю тип SQL. Перехватывая токен SQL, перехват может быть выбран, удалять, обновлять, вставить, альтернать и т. Д., Но все они являются строками. В настоящее время я хочу использовать Enums, но я не могу этого сделать. Как преобразовать строку в перечисление? Подобные ситуации включают в себя получение данных из базы данных и вынесение суждений на основе некоторых типов, передачу данных со страницы и выполнение различных операций в соответствии с различными типами, но все это строки, а не перечисление. Трагедия в том, что я редко вижу кого -то, кто пишет эту вещь; Поэтому я записал это, надеясь, что кто -то сможет его использовать.
Прежде всего, зачем использовать перечисление? Когда лучше использовать перечисления? Каковы преимущества использования enum?
Я думаю, что когда вы находитесь в некоторых классах категорий и можете перечислять и неизменные типы, чтобы направлять программу для маршрута в разные места, использование перечисления - лучший выбор;
Это звучит немного сбивает с толку, но есть пример, который можно понять, например:
Мы можем перечислить то, что мы делаем в наши ежедневные рабочие дни:
Иди на работу, провести встречи, есть, сон и т. Д.
Мы можем перечислить детали, которые необходимо проверить отделом ЛОР в больнице:
Глаза, нос, уши, рот и т. Д.
Они могут быть перечислены, и мы должны делать каждый из них по -разному;
Конечно, вы можете сказать:
1. его можно динамически отправлять через файлы конфигурации или аннотацию;
2. Константы могут быть использованы для достижения аналогичных эффектов;
3. Выразите его непосредственно через равные строки и выразите ее, если еще.
Если вы используете метод добавления конфигурации для его отправки, он гибкий и легко изменять; Но если мы используем много параметров, которые часто не изменяются, мы часто увеличиваем бремя конфигурации, и когда вам нужно прочитать системную логику, вам необходимо снова прочитать конфигурацию и код; Однако, если параметры являются динамически преобразованной информацией, использование конфигурации является правильным выбором;
Использование констант обычно является числами при переключении случаев, а строки не могут быть чехлами переключения на Java. Цель использования постоянных увеличивает читабельность, чем случай 1 и случай 2 ... но строковые данные также являются проблемными. Если это не нанесено на карту, нет необходимости. На самом деле, перечисление почти однажды отображается для вас, но он просто инкапсулирует код. Так как это было сделано и синтаксически поддерживается, почему бы не использовать его! Во -вторых, хотя константы увеличивают читаемость, они не имеют концепции категорий и типов управления. То есть определение перечисления определяет категорию, которая может хорошо перечислять вещи, необходимые для этого диапазона. Константы обычно представляют собой некоторые пулы, определяемые сами по себе, помещаются в некоторые публичные классы или определяются случайным образом, и относительно разбросаны. Кроме того, перечисление четко определяется при переключении, и корпус находится в диапазоне перечисления блокировки. Он может не только управлять системой, увеличить читабельность, но и проверить, какая информация перечислена в этой категории в любое время, чтобы достичь функции просмотра файлов конфигурации; Но он все еще возвращается в этом предложении, если параметры являются переменными, то оно не подходит для перечисления. Перечисления должны быть перечислены, или текущие системы могут быть перечислены. Например, в вышеуказанной больнице может быть много больниц, но нынешняя больница обрабатывает только несколько частей и не обрабатывает другие. Это причина. Что такое переменная? Например, параметры URL отправляются на соответствующий метод. Всем невозможно добавить кусок логики и добавить перечисление и корпус. В настоящее время лучше использовать [Configuration + Dynamic Method Dispatch]. Конечно, конфигурация может быть просто файлом или аннотацией.
Самое деревенское - использовать строку, равную ее, чтобы реализовать ее, если еще. Ха -ха, в этом нет ничего плохого, но это написано разбросанным способом. Во -вторых, каждое равное соответствие должно сравниваться с каждым символом каждый раз, когда вы соответствуете равным. Если вы много разыгрываете в своем коде, производительность не очень хорошая, а остальные будут более ясными после рассмотрения вышеуказанного описания;
Во-вторых, перечисление обеспечивает компонент управления типом, что делает объектно-ориентированную систему более совершенной, чтобы можно было настроить и управлять некоторыми типами управления. Если используется перечисление, вы можете найти определение перечисления, которое было обработано и не было обработано, и вышеупомянутое трудно достичь; Например, существует 10 типов типов операций, определенных в базах данных, поэтому в процессе определения перечисления можно рассматривать как файл конфигурации, и оно очень просто управлять.
Наконец, перечисление является абсолютно синглтоном, и производительность сравнения сопоставима с показателем цифровой производительности, которая может получить читаемость и производительность.
Основное использование типа enum
С такой теоретической основой давайте посмотрим на типы перечисления перечисления в Java:
1. Вы можете добавить переменные и методы, чтобы перечислять
Давайте посмотрим на пример кода:
Public Enum State {Normal («Нормальный», 1), обновление («Обновление», 2), удален («удален», 3), уволен («Маскирован», 4); // Участничная переменная частная строка имени; частный индекс Int; // построить метод, примечание: конструктор не может быть публичным, потому что enum не может быть создан частным состоянием (String name, int index) {this.name = name; this.index = index; } // нормальный метод публичный статический строка getName (int index) {for (состояние c: atation. Values ()) {if (c.getindex () == index) {return c.name; }} return null; } // Получить метод SET public String getName () {return name; } public void setName (string name) {this.name = name; } public int getIndex () {return index; } public void setIndex (int index) {this.index = index; }}Из приведенного выше кода мы видим, что после определения значения перечисления, затем добавив к нему полуколон, а затем вы можете определить другие переменные и методы. Следует отметить, в частности, что метод строительства в Enum не может быть идентифицирован общественностью, поэтому это сделано, чтобы предотвратить создание пользователя.
2. можно использовать для определения констант
Давайте сначала рассмотрим, как определить константы в Java, и посмотрим на следующий код:
public static final int ram -starte = 1; частный статический окончательный окончательный int updateState = 2;
Ниже мы также можем использовать enum enum для замены вышеуказанного постоянного определения, код заключается в следующем:
Public Enum State {нормальное, обновление, удалено, уволен}В использовании Enum нет никакого синтаксического преимущества для определения констант в Java, но тип перечисления перечисления может обеспечить больше рабочих функций.
3. Реализация интерфейса в переводе
Давайте сначала посмотрим на следующий код:
публичный интерфейс iCanReadState {void Read (); String getState ();} public enum sather реализует iCanReadState {normal («нормальный», 1), обновление («Обновление», 2), удалено («удалено», 3), уволен («Маскирован», 4); Приватное название строки; частный индекс Int; частное состояние (String name, int index) {this.name = name; this.index = index; } // Метод интерфейса 1 @Override public String getState () {return this.name; } // Метод интерфейса 2 @Override public void read () {System.out.println (this.index + ":" + this.name); }}Так же, как использование интерфейсов в общих классах, перечисление enum также может наследовать интерфейс и реализовать все методы в интерфейсе. Преимущество этого заключается в том, что он может более удобно сортировать, сравнить и другие операции по значениям в перечислении и иметь лучшую инкапсуляцию.
Пример
Давайте сначала определим простой перевод (вот просто пример, поэтому мы просто определим 3 переменных):
public enum sqltypeenum {вставьте, обновить, удалить, выберите}После анализа SQL получается токен. Как получить перечисление этого токена?
Получите это так:
String token = "select"; sqltypeenum sqltypeenum = sqltypeenum.valueof (token.touppercase ());
Если не будет
Причина, по которой я зажигаю, заключается в том, что перечисление также заглаживается (конечно, если ваш перечисление является строчным, то вы строчный, но смешать его более хлопотно). Фактически, значение вызывает базовое отображение перечисления:
Этот метод будет вызван при вызове:
Итак, внутри, ха -ха!
После получения этой информации вы можете выполнить желаемую операцию:
Switch (sqltypeenum) {case insert: обрабатывать логику вставки; перерыв; Удаление случая: ручка удалить логику; перерыв; ....}ОК, иногда мы можем не захотеть использовать строки, такие как вставка или обновление непосредственно во взаимодействии, потому что требуются спецификации именования;
Например, определите некоторые типы действий пользователя:
1. Сохранить информацию пользователя
2. Получить базовую информацию пользователя через ID
3. Получите список пользователей
4. Удалить информацию пользователя через ID
и т. д.
Мы можем определить перечисления как:
public enum userOptionEnum {save_user, get_user_by_id, get_user_list, delete_user_by_id}Тем не менее, системные методы и некоторые конфигурации ключевых слов обычно записываются как:
saveUser, getuserbyid, getuserbyid, deleteuserbyid
Конечно, у каждого есть свои правила, но если вы не хотите делать картирование в середине, вы просто пойдете на компромисс. Либо замените все имена перечисления, что кажется довольно странным, либо замените все имена методов, что еще более странно, либо вы можете сделать отображение самостоятельно. Хорошо, это немного более хлопотно, но на самом деле это не проблематично?
Давайте сначала напишем метод для преобразования перечисленных данных в стиле шрифта на верблюды и поместим их в Stringutils:
Public Static String ConvertDBStyLejavastyle (String dbstyLestring, Boolean FirstUpper) {dbstylestring = dbstylestring.tolowercase (); String [] tokens = dbstylestring.split ("_"); StringBuilder StringBuilder = new StringBuilder (128); int length = 0; for (string token: tokens) {if (stringutils.isnotblank (token)) {if (length == 0 &&! FirstUpper) {stringBuilder.append (token); } else {char c = token.charat (0); if (c> = 'a' || c <= 'z') c = (char) (c - 32); stringBuilder.append (c); stringBuilder.append (token.substring (1)); }} ++ длина; } return stringBuilder.toString (); }Перегружать метод:
Public Static String ConvertDBStyleJavalocalStyle (String dbstylestring) {return convertdbstylejavastyle (dbstylestring, false); }Затем определите перечисление:
public enum userOptionEnum {save_user, get_user_by_id, get_user_list, delete_user_by_id; Приватная окончательная статическая карта <string, userOptionEnum> enum_map = new Hashmap <String, userOptionEnum> (64); static {for (userOptionEnum v: values ()) {enum_map.put (v.toString (), v); }} public staticUserOptionEnum fromString (String V) {userOptionEnum userOptionEnum = enum_map.get (v); return userOptionEnum == null? По умолчанию: useroptionenum; } public String toString () {string stringValue = super.toString (); return stringutil.convertdbstyletojavalocalstyle (stringValue); }}Хорошо, передайте параметр события, как это, так что если это так: SaveUser, используйте:
String event = "saveUser"; // Если вы получите параметр userOptionEnum enum = userOptionEnum.fromString (event);
На самом деле, я сам сделал хэшмап и добавил от погрузчика, потому что есть некоторые ограничения на перечисление, и некоторые методы не позволяют вам перезаписать, например, метод значения.
На самом деле, нечего сказать. Давайте поговорим о добавлении некоторых пользовательских переменных для перечисления. На самом деле, за исключением того, что быть синглтоном, другие перечисления похожи на обычные классы. Они также могут иметь методы конструктора, но не по умолчанию. Они также могут предоставить пользовательские переменные, а затем получить набор и получить методы. Однако, если есть установлен, поток небезопасно, поэтому обратите внимание на эту точку; Таким образом, метод строительства обычно пишется:
public enum sqltypeenum {insert ("insert int"), delete ("delete") ...... опущены; Private String name; // определить пользовательскую переменную private sqltypeenum (string name) {this.name = name; } public String getName () {return name; } public String toString () {return name + "i dash"; // переписать метод ToString} // обычно не рекомендуется public void setName (string name) {this.name = name; }}Называется:
Sqltypeenum sqltypeenum = sqltypeenum.valueof ("insert"); system.out.println (sqltypeenum); System.out.println (sqltypeenum.getname ());Не рекомендуется называть это:
sqltypeenum.setname ("черт");В другой ветке:
Sqltypeenum sqltypeenum = sqltypeenum.valueof ("insert"); system.out.println (sqltypeenum); System.out.println (sqltypeenum.getname ());Я обнаружил, что результат был изменен, ха -ха!