EnumHelper.java 1.55 KB
Newer Older
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 53 54
package pwc.taxtech.atms.common;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class EnumHelper {
	private static Map<Class, List<IdKeyNameData>> enumMap;

	static {
		enumMap = new HashMap<Class, List<IdKeyNameData>>();
	}

	public static List<IdKeyNameData> ToIdkeyNameCollection(Class enumType) {
		if (!enumMap.containsKey(enumType)) {
			synchronized (enumMap) {
				if (!enumMap.containsKey(enumType)) {
					enumMap.put(enumType, EnumToIdKeyNameCollection(enumType));
				}
			}
		}
		return enumMap.get(enumType);
	}

	private static List<IdKeyNameData> EnumToIdKeyNameCollection(Class enumType) {

		List<IdKeyNameData> enumKeyNames = new ArrayList<IdKeyNameData>();
		try {
			Method toName = enumType.getMethod("toName");
			Method toCode = enumType.getMethod("toCode");
			Method toDisplayName = enumType.getMethod("toDisplayName");
			// 得到enum的所有实例
			Object[] objs = enumType.getEnumConstants();
			for (Object obj : objs) {
				IdKeyNameData newData = new IdKeyNameData();
				newData.setID((Integer) toCode.invoke(obj));
				newData.setKey((String) toName.invoke(obj));
				newData.setName((String) toDisplayName.invoke(obj));
				enumKeyNames.add(newData);
			}
			return enumKeyNames;
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		return enumKeyNames;
	}
}