Java Enum 浅析

1.        关于 Java Enum:

学过 C/C++ 等语言的人,应该都对 Enum 类型略知一二。 Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代。有了 JavaEnum 之后,可以更贴近的表示这种常量。

2.        如何使用 Java Enum

简单的用法: JavaEnum 简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:

 

性别:

public enum SexEnum {

   male female ;

}

颜色:

public enum Color {

   RED BLUE,GREEN,BLACK ;

} 

枚举对象里面的值都必须是唯一的。

可以通过 Enum 类型名直接引用该常量,如 SexEnum.male,Color.RED.


注:以上摘自CSDN:abing37

复杂用法: Java 为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象。

下面是几个示例代码:

Code 1 :EnumMethod.java

下面是枚举类型的常用方法:

/**
  * author owenyang
  * data   2012-11-2
  */
 import static java.lang.System.out;
 
 public class EnumMethod {
 
 	enum SexEnum{
 		male,
 		famle,
 		shemale
 	}
 	
 	//compareTo()
 	public static void compare(SexEnum sexE){
 		for(int i = 0 ; i <SexEnum.values().length; i++){
 			out.println("The Result of "+sexE+" compareTo "+SexEnum.values()[i]+": "+
 					sexE.compareTo(SexEnum.values()[i]));
 		}
 	}
 	
 	public static void main(String[] args) {
 		// TODO Auto-generated method stub
 		for(SexEnum sex: SexEnum.values()){
 			out.println("Enum member variable: "+sex);
 		}
 		
 		//use another way to show
 		out.println("------------use another way to show------------ ");
 		for(int i =0;i<SexEnum.values().length;i++){
 			out.println("Enum member variable: "+SexEnum.values()[i]);
 		}
 		
 		//compareTo() and valueOf()
 		compare(SexEnum.valueOf("shemale"));
 		
 		//ordinal() to get the index of member variable
 		for(SexEnum sex: SexEnum.values()){
 			out.println("Index of "+sex+" "+sex.ordinal());
 		}
 	}
 
 }

Code 2:EnumConstructor.java

下面是枚举类型中的构造方法使用

public class EnumConstructor {
 	
 	//constructor usage
 	enum SexEnum{
 		male("I am a man"),
 		famle("I am a woman"),
 		shemale("I am a shemale");
 		
 		private String description;
 		private SexEnum(String str){
 			this.description=str;
 		}
 		
 		public String getDescription(){
 			return this.description;
 		}
 	}
 	
 	//we can also define the getDescription in the interface
 	interface GetDesc{
 		public String getDescription();
 	}
 	enum ExtraEnum implements GetDesc{
 		male{
 			public String getDescription(){
 				return "I am a super man";
 			}
 		},		
 		famle{
 			public String getDescription(){
 				return "I am a super woman";
 			}
 		}
 	}
 		
 	public static void main(String[] args) {
 		// TODO Auto-generated method stub
 		for(SexEnum sex:SexEnum.values()){
 			System.out.println("Info: "+sex.getDescription());
 		}
 		
 		//test interface
 		for(int i =0;i<ExtraEnum.values().length;i++){
 			System.out.println(ExtraEnum.values()[i]+" invoke getDescription: "
 					+ExtraEnum.values()[i].getDescription());
 		}
 	}
 
 }

Code 3: EnumerationTest.java

下面是枚举接口的简单示例:

 

import java.util.Enumeration;
 import java.util.Vector;
 
 public class EnumerationTest {
 	
 	public static void main(String[] args) {
 		// TODO Auto-generated method stub
 		Vector<Integer> vector = new Vector<Integer>();
 		
 		for(int i =0;i<5;i++){
 			vector.add(i);
 			System.out.println("add elements to vector: "+i);
 		}
 		
 		//将向量转换成枚举接口型 
 		Enumeration<Integer> e = vector.elements();
 		while(e.hasMoreElements()){
 			System.out.println("element: "+e.nextElement());
 		}
 	}
 
 }

以上,大部分摘自牛人,代码已测。

原文地址:https://www.cnblogs.com/owenyang/p/3579124.html