Java枚举Enum的访问

如何通过索引或者名字串来访问枚举呢?
	public enum AppID {
		APP_QQ, 
		APP_XUNLEI, 
		APP_360;
		
		public static AppID int2AppID(int id){
			return AppID.class.getEnumConstants()[id];
		}
		
		public static AppID name2AppID(String name){
			return Enum.valueOf(AppID.class, name);
		}
	}

Java处理枚举时,会给枚举生成一个数组,可以通过values访问,所以上面的代码和下面的是等价的:

	public enum AppID {
		APP_QQ, 
		APP_XUNLEI, 
		APP_360;
		
		public static AppID int2AppID(int id){
			return AppID.values()[id];
		}
		
		public static AppID name2AppID(String name){
			for(AppID app : AppID.values()){
				if(app.toString().equals(name)){
					return app;
				}
			}
			return null;
		}
	}

有异常的存在不是完全等价

顺便送上一个处理Enum的Utility:

public class EnumUtility {
	public static int getMaxOrdinal(Class<? extends Enum> cls){
		return cls.getEnumConstants().length;
	}
	
	public static int getOrdinalByName(String str, Class<? extends Enum> cls){
		int ordinal = 0;
		for(Object obj : cls.getEnumConstants()){
			if(obj.toString().equals(str)){
				return ordinal;
			}
			ordinal++;
		}
		return -1;
	}
	
	public static Object getEnumItemByName(String name, Class<? extends Enum> cls){
		return Enum.valueOf(cls, name);
	}
	
	public static Object getEnumItemByOrdinal(int ordinal, Class<? extends Enum> cls){
		if(ordinal > EnumUtility.getMaxOrdinal(cls)){
			return null;
		}else{
			return cls.getEnumConstants()[ordinal];
		}			
	}
}

你可能感兴趣的:(Java枚举Enum的访问)