All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.tom.kit.clazz.Converter Maven / Gradle / Ivy

There is a newer version: 1.0.3
Show newest version
package cn.tom.kit.clazz;

import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;


/**
 *  converters for class.
 */
public class Converter{

	/* 静态方法反射 调用, 无需初始化 */
	@SuppressWarnings("serial")
	private static final HashMap, Method> class2Value = new HashMap, Method>() {
		{
			try {
				Class s = java.lang.String.class;
				/* boolean.class === java.lang.Boolean.TYPE */
				put(java.lang.Boolean.TYPE, java.lang.Boolean.class.getMethod("parseBoolean", s));
				put(java.lang.Byte.TYPE, java.lang.Byte.class.getMethod("parseByte", s));
				put(java.lang.Double.TYPE, java.lang.Double.class.getMethod("parseDouble", s));
				put(java.lang.Float.TYPE, java.lang.Float.class.getMethod("parseFloat", s));
				put(java.lang.Integer.TYPE, java.lang.Integer.class.getMethod("parseInt", s));
				put(java.lang.Long.TYPE, java.lang.Long.class.getMethod("parseLong", s));
				put(java.lang.Short.TYPE, java.lang.Short.class.getMethod("parseShort", s));

				put(java.lang.String.class, java.lang.String.class.getMethod("valueOf", Object.class));
				put(java.lang.Boolean.class, java.lang.Boolean.class.getMethod("parseBoolean", s));
				put(java.lang.Byte.class, java.lang.Byte.class.getMethod("parseByte", s));
				put(java.lang.Double.class, java.lang.Double.class.getMethod("parseDouble", s));
				put(java.lang.Float.class, java.lang.Float.class.getMethod("parseFloat", s));
				put(java.lang.Integer.class, java.lang.Integer.class.getMethod("parseInt", s));
				put(java.lang.Long.class, java.lang.Long.class.getMethod("parseLong", s));
				put(java.lang.Short.class, java.lang.Short.class.getMethod("parseShort", s));
				

				put(java.util.Date.class, Converter.class.getMethod("parserDate", s));
				put(java.sql.Timestamp.class, Converter.class.getMethod("parserDateTime", s));

			} catch (Exception e) {
				throw new Error(e);
			}

		}
	};

	public static Date parserDate(String date) {
		try {
			return new SimpleDateFormat("yyyy-MM-dd").parse(date);
		} catch (ParseException e) {
			return null;
		}
	}

	public static Date parserDateTime(String date) {
		try {
			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
		} catch (ParseException e) {
			return null;
		}
	}

	public static boolean canConvertValue(Class clazz) {
		return class2Value.containsKey(clazz);
	}

	/**
	 * 静态方法反射 调用, 有参无需初始化 
	 * @param 
	 * @param _class
	 * @param obj == null 实例
	 * @param param !=null 反射参数
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static  T coverterClass2Value(Class _class, Object obj, Object... param) {
		try {
			return (T) class2Value.get(_class).invoke(obj, param);
		} catch (Exception e) {
			ReflectUtil.handleReflectionException(e);
		}
		return null;
	}
	
	
	/* -------------------------type2Class----------------------------------- */
	private static final HashMap> type2Class = new HashMap>();
	static {
		type2Class.put(java.lang.Boolean.TYPE, java.lang.Boolean.class);
		type2Class.put(java.lang.Byte.TYPE, java.lang.Byte.class);
		type2Class.put(java.lang.Character.TYPE, java.lang.Character.class);
		type2Class.put(java.lang.Double.TYPE, java.lang.Double.class);
		type2Class.put(java.lang.Float.TYPE, java.lang.Float.class);
		type2Class.put(java.lang.Integer.TYPE, java.lang.Integer.class);
		type2Class.put(java.lang.Long.TYPE, java.lang.Long.class);
		type2Class.put(java.lang.Short.TYPE, java.lang.Short.class);
		
	}

	public static Type convertType2Class(Type type) {
		if(type2Class.containsKey(type)){
			return type2Class.get(type);
		}
		return type;
	}
	

	/* -------------------------name2Class----------------------------------- */
	private static final HashMap> name2Class = new HashMap>();
	static {
		
		name2Class.put("java.lang.Boolean.TYPE", java.lang.Boolean.class);
		name2Class.put("java.lang.Byte.TYPE", java.lang.Byte.class);
		name2Class.put("java.lang.Character.TYPE", java.lang.Character.class);
		name2Class.put("java.lang.Double.TYPE", java.lang.Double.class);
		name2Class.put("java.lang.Float.TYPE", java.lang.Float.class);
		name2Class.put("java.lang.Integer.TYPE", java.lang.Integer.class);
		name2Class.put("java.lang.Long.TYPE", java.lang.Long.class);
		name2Class.put("java.lang.Short.TYPE", java.lang.Short.class);
		
		name2Class.put("boolean", java.lang.Boolean.class);
		name2Class.put("byte", java.lang.Byte.class);
		name2Class.put("char", java.lang.Character.class);
		name2Class.put("double", java.lang.Double.class);
		name2Class.put("float", java.lang.Float.class);
		name2Class.put("int", java.lang.Integer.class);
		name2Class.put("long", java.lang.Long.class);
		name2Class.put("short", java.lang.Short.class);
		
		name2Class.put("java.lang.Boolean", java.lang.Boolean.class);
		name2Class.put("java.lang.Byte", java.lang.Byte.class);
		name2Class.put("java.lang.Character", java.lang.Character.class);
		name2Class.put("java.lang.Double", java.lang.Double.class);
		name2Class.put("java.lang.Float", java.lang.Float.class);
		name2Class.put("java.lang.Integer", java.lang.Integer.class);
		name2Class.put("java.lang.Long", java.lang.Long.class);
		name2Class.put("java.lang.Short", java.lang.Short.class);

		name2Class.put("Boolean", java.lang.Boolean.class);
		name2Class.put("Byte", java.lang.Byte.class);
		name2Class.put("Character", java.lang.Character.class);
		name2Class.put("Double", java.lang.Double.class);
		name2Class.put("Float", java.lang.Float.class);
		name2Class.put("Integer", java.lang.Integer.class);
		name2Class.put("Long", java.lang.Long.class);
		name2Class.put("Short", java.lang.Short.class);

		name2Class.put(null, java.lang.Void.TYPE);
		name2Class.put("string", java.lang.String.class);
		name2Class.put("String", java.lang.String.class);
		name2Class.put("java.lang.String", java.lang.String.class);
	}
	
	
	
	public static Class convertName2Class(String name) {
		if(name2Class.containsKey(name)){
			return name2Class.get(name);
		}
		return null;
	}

	/* ------------------------------------------------------------ */
	private static final HashMap, String> class2Name = new HashMap, String>();
	static {
		class2Name.put(java.lang.Boolean.TYPE, "boolean");
		class2Name.put(java.lang.Byte.TYPE, "byte");
		class2Name.put(java.lang.Character.TYPE, "char");
		class2Name.put(java.lang.Double.TYPE, "double");
		class2Name.put(java.lang.Float.TYPE, "float");
		class2Name.put(java.lang.Integer.TYPE, "int");
		class2Name.put(java.lang.Long.TYPE, "long");
		class2Name.put(java.lang.Short.TYPE, "short");
		class2Name.put(java.lang.Void.TYPE, "void");

		class2Name.put(java.lang.Boolean.class, "java.lang.Boolean");
		class2Name.put(java.lang.Byte.class, "java.lang.Byte");
		class2Name.put(java.lang.Character.class, "java.lang.Character");
		class2Name.put(java.lang.Double.class, "java.lang.Double");
		class2Name.put(java.lang.Float.class, "java.lang.Float");
		class2Name.put(java.lang.Integer.class, "java.lang.Integer");
		class2Name.put(java.lang.Long.class, "java.lang.Long");
		class2Name.put(java.lang.Short.class, "java.lang.Short");

		class2Name.put(null, "void");
		class2Name.put(java.lang.String.class, "java.lang.String");
	}

	
	
	public static String convertclass2Name(String name) {
		if(class2Name.containsKey(name)){
			return class2Name.get(name);
		}
		return null;
	}
	

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy