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:
枚举有自己的命名空间。 这意味着您的枚举将在下面的示例中具有例如“公司”的类型,并且除了枚举常量中指定的值之外,您不能分配任何值。
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 点
枚举常量是隐式静态和最终的,一旦创建就不能更改。
第 5 点
可以使用以下方法安全地比较枚举:
- 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 点
您不能在 Java 中使用 new 运算符创建枚举实例,因为 Java 中 Enum 的构造函数只能是私有的,而 Enums 常量只能在 Enums 本身内部创建。
第 7 点
Java 中的 Enum 实例是在代码中首次调用或引用任何 Enum 常量时创建的。
第 8 点
枚举指定分配给类型的常量值列表。
第 9 点
枚举可以在类外部或内部声明,但不能在方法中声明。
第 10 点
在类之外声明的枚举不得标记为 static、final、abstract、protected 或 private
第 11 点
枚举可以包含构造函数、方法、变量和常量类主体。
第 12 点
枚举常量可以使用语法 BIG(8) 向枚举构造函数发送参数,其中 int 字面量 8 被传递给枚举构造函数。
第 13 点
枚举构造函数可以有参数,并且可以重载。
第 14 点
永远不能在代码中直接调用枚举构造函数。 它们总是在枚举初始化时自动调用。
第 15 点
枚举声明末尾的分号是可选的。
这些是合法的:
- 枚举 Foo { 一、二、三}
- 枚举 Foo {一、二、三};
另一个简单的 Java eNUM 示例:
枚举是常量列表。 当您需要一个代表某种数字或文本数据的预定义值列表时,您应该使用枚举。
当变量(尤其是方法参数)只能从一小组可能值中取出一个时,您应该始终使用枚举。 例如类型常量(合同状态:“永久”、“临时”、“学徒”)或标志(“立即执行”、“延迟执行”)。
如果您使用枚举而不是整数(或字符串代码),您会增加编译时检查并避免因传递无效常量而导致的错误,并记录哪些值是合法使用的。
在这两者之间,过度使用枚举可能意味着你的方法做得太多(最好有几个单独的方法,而不是一个方法需要几个标志来修改它的作用),但是如果你必须使用标志或类型代码,枚举是要走的路。
这是一个非常简单的 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 |