java 动态实例化内部类 可解析枚举


package com.util;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * <strong>功能:</strong>枚举使用工具 <strong>作者:</strong>Gary Huang <strong>日期:</strong>
 * 2014-3-5 <strong>版权:<strong>版权所有(C) 2014,QQ 834865081
 */
public class EnumUtil {

	public static void main(String[] args) throws Exception {
		System.out.println(parseEnum("enum:com.util.Task1.Yes"));
		
	}

	public static Map<Integer, String> parseEnum(String clazz)
			throws Exception {
		
		if(clazz.startsWith("enum:")){
			clazz = clazz.replace("enum:", "" ); 
		}else{
			return null ; 
		}
		
		Class<?> ref = forName(clazz) ;
		
		if(null == ref){
			throw new ClassNotFoundException(String.format("%s class not fond ", clazz)); 
		}
		
		
		Map<Integer, String> map = new LinkedHashMap<Integer, String>();
		if (ref.isEnum()) {
			Object[] ts = ref.getEnumConstants();
			for (Object t : ts) {
				Enum<?> e = (Enum<?>) t;
				map.put(e.ordinal(), e.name());
			}
		}
		return map;
	}
	
	static Class<?> forName(String className) throws Exception{ 
		String[]packageNames = className.split("\\.") ;  
		String tempClassName = "" ; 
		Class<?> returnClazz = null ; 
		for(String packageName : packageNames){
			tempClassName += packageName ; 
			if(fristCharIsUpper(packageName)){
				if( null == returnClazz){
					try{
						returnClazz = Class.forName( tempClassName);
					}catch(Exception e){}
				}else {
					Class<?> classes[]=returnClazz.getDeclaredClasses();
					for(Class<?> tempClazz : classes){
						if(tempClazz.getSimpleName().equals(packageName)){
							returnClazz = tempClazz ;  
						}
					}
				}
			}
			tempClassName += "." ;
		}
		return returnClazz ;    
	}
	
	static boolean fristCharIsUpper(String name){
		if(null != name && name.length() >0){
			char[]chars = name.toCharArray() ;
			int intChar = (int)chars[0] ;
			return  intChar <= 90 && intChar >= 65 ;   
		}
		return false ; 
	}
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。