Руководство для начинающих по Java eNum — почему и для чего следует использовать Enum? Примеры перечисления Java
Опубликовано: 2019-04-23 Перечисления — это списки constants
, таких как неизменяемые переменные. Вы слышали о Final keyword
? Это все равно, что.
Когда вам нужен предопределенный список значений, которые представляют какие-то числовые или текстовые данные, вы должны использовать перечисление. Например, в шахматной игре вы можете представить различные типы фигур в виде перечисления:
1 2 3 4 5 6 7 8 |
enum ChessPiece { PAWN , ROOK , KNIGHT , BISHOP , QUEEN , KING ; } |
Вы всегда должны использовать перечисления, когда переменная (особенно параметр метода) может принимать только одно из небольшого набора возможных значений. Примерами могут служить константы типа (статус контракта: «постоянный», «временный», «ученик») или флаги («выполнить сейчас», «отложить выполнение»).
Если вы используете перечисления вместо целых чисел (или строковых кодов), вы увеличиваете количество проверок во время компиляции и избегаете ошибок из-за передачи недопустимых констант, а также документируете, какие значения допустимы для использования.
Пример Java :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName ; public CrunchifyEnumExample ( Company cName ) { this . cName = cName ; } public void companyDetails ( ) { switch ( cName ) { case EBAY : System . out . println ( "EBAY: Biggest Market Place in the World." ) ; break ; case PAYPAL : System . out . println ( "PAYPAL: Simplest way to manage Money." ) ; break ; case GOOGLE : case YAHOO : System . out . println ( "YAHOO: 1st Web 2.0 Company." ) ; break ; default : System . out . println ( "DEFAULT: Google - biggest search giant.. ATT - my carrier provider.." ) ; break ; } } public static void main ( String [ ] args ) { CrunchifyEnumExample ebay = new CrunchifyEnumExample ( Company . EBAY ) ; ebay . companyDetails ( ) ; CrunchifyEnumExample paypal = new CrunchifyEnumExample ( Company . PAYPAL ) ; paypal . companyDetails ( ) ; CrunchifyEnumExample google = new CrunchifyEnumExample ( Company . GOOGLE ) ; google . companyDetails ( ) ; CrunchifyEnumExample yahoo = new CrunchifyEnumExample ( Company . YAHOO ) ; yahoo . companyDetails ( ) ; CrunchifyEnumExample att = new CrunchifyEnumExample ( Company . ATT ) ; att . companyDetails ( ) ; } } |
Выход:
1 2 3 4 5 6 7 |
EBAY : Biggest Market Place in the World . PAYPAL : Simplest way to manage Money . YAHOO : 1st Web 2.0 Company . YAHOO : 1st Web 2.0 Company . DEFAULT : Google - biggest search giant . . ATT - my carrier provider . . Process finished with exit code 0 |
Некоторые очень важные моменты в Java Enum:
Точка-1
Все перечисления неявно расширяют java.lang.Enum
. Поскольку Java не поддерживает множественное наследование, перечисление не может расширять ничего другого.
Точка-2
Enum in Java are type-safe:
у Enum есть собственное пространство имен. Это означает, что ваше перечисление будет иметь тип, например, «Компания» в приведенном ниже примере, и вы не можете присвоить какое-либо значение, кроме указанного в константах перечисления.
1 2 3 4 5 6 |
public enum Company { EBAY , PAYPAL , GOOGLE , YAHOO , ATT } Company cName = Company . EBAY ; cName = 1 ; // Compilation Error |

Точка-3
Вы можете указать значения констант перечисления во время создания. MyEnum.values()
возвращает массив значений MyEnum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public enum Company { EBAY ( 30 ) , PAYPAL ( 10 ) , GOOGLE ( 15 ) , YAHOO ( 20 ) , ATT ( 25 ) ; private int value ; private Company ( int value ) { this . value = value ; } } public static void main ( String [ ] args ) { for ( Company cName : Company . values ( ) ) { System . out . println ( "Company Value: " + cName . value + " - Company Name: " + cName ) ; } } } |
Выход:
1 2 3 4 5 |
Company Value : 30 - Company Name : EBAY Company Value : 10 - Company Name : PAYPAL Company Value : 15 - Company Name : GOOGLE Company Value : 20 - Company Name : YAHOO Company Value : 25 - Company Name : ATT |
Точка-4
Константы Enum неявно являются статическими и окончательными и не могут быть изменены после создания.
Точка-5
Enum можно безопасно сравнивать, используя:
- Оператор Switch-Case
- == Оператор
- Метод .equals()Пожалуйста, следуйте полному руководству.
1 2 3 4 |
Company eBay = Company . EBAY ; if ( eBay == Company . EBAY ) { log . info ( "enum in java can be compared using ==" ) ; } |
Точка-6
Вы не можете создать экземпляр перечисления с помощью оператора new в Java, потому что конструктор Enum в Java может быть только закрытым, а константы Enum могут быть созданы только внутри самого Enum.
Точка-7
Экземпляр Enum в Java создается, когда любые константы Enum впервые вызываются или упоминаются в коде.
Точка-8
Перечисление задает список постоянных значений, присвоенных типу.
Точка-9
Перечисление может быть объявлено вне или внутри класса, но НЕ в методе.
Точка-10
Перечисление, объявленное вне класса, НЕ должно быть помечено как static, final, abstract, protected или private.
Точка-11
Перечисления могут содержать конструкторы, методы, переменные и тела константных классов.
Точка-12
Константы перечисления могут отправлять аргументы конструктору перечисления, используя синтаксис BIG(8), где целочисленный литерал 8 передается конструктору перечисления.
Точка-13
конструкторы enum могут иметь аргументы и могут быть перегружены.
Точка-14
конструкторы enum НИКОГДА не могут быть вызваны непосредственно в коде. Они всегда вызываются автоматически при инициализации перечисления.
Точка-15
Точка с запятой в конце объявления перечисления необязательна.
Это законно:
- перечисление Foo {ОДИН, ДВА, ТРИ}
- enum Foo {ОДИН, ДВА, ТРИ};
Еще один простой пример Java eNUM:
Enums — это списки констант. Когда вам нужен предопределенный список значений, которые представляют какие-то числовые или текстовые данные, вы должны использовать перечисление.
Вы всегда должны использовать перечисления, когда переменная (особенно параметр метода) может принимать только одно из небольшого набора возможных значений. Примерами могут служить константы типа (статус контракта: «постоянный», «временный», «ученик») или флаги («выполнить сейчас», «отложить выполнение»).
Если вы используете перечисления вместо целых чисел (или строковых кодов), вы увеличиваете количество проверок во время компиляции и избегаете ошибок из-за передачи недопустимых констант, а также документируете, какие значения допустимы для использования.
Между тем, чрезмерное использование перечислений может означать, что ваши методы делают слишком много (часто лучше иметь несколько отдельных методов, а не один метод, который принимает несколько флагов, которые изменяют то, что он делает), но если вам нужно использовать флаги или коды ввода, перечисления путь.
Это очень простой пример Java eNum
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com . crunchify . tutorials ; /** * @author Crunchify.com */ public enum CrunchifyEnumCompany { GOOGLE ( "G" ) , YAHOO ( "Y" ) , EBAY ( "E" ) , PAYPAL ( "P" ) ; private String companyLetter ; private CrunchifyEnumCompany ( String s ) { companyLetter = s ; } public String getCompanyLetter ( ) { return companyLetter ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com . crunchify . tutorials ; import com . crunchify . tutorials . CrunchifyEnumCompany ; /** * @author Crunchify.com */ public class CrunchifyEnumExample { public static void main ( String [ ] args ) { System . out . println ( "Get enum value for Comapny 'eBay': " + CrunchifyEnumCompany . EBAY . getCompanyLetter ( ) ) ; } } |
Выход:
1 |
Get enum value for Comapny 'eBay' : Value : E |