`
yshlin
  • 浏览: 61298 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java反射Bean

    博客分类:
  • java
阅读更多
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;

/**
 * 反射类将Map转换为bean;
 * @author mywhile
 *
 * @param <T>
 */
@SuppressWarnings("unchecked")
public class RequestUtil<T> {
	
	public static <T> T convertToBean(Map map, T obj) 
				throws SecurityException, NoSuchMethodException, 
					IllegalArgumentException, InstantiationException, 
					IllegalAccessException, InvocationTargetException {
		Class<?> classType = obj.getClass();
		Field[] fields = classType.getDeclaredFields();//得到对象中的字段
		//每次循环时,重新实例化一个与传过来的对象类型一样的对象
        T oCopy = (T) classType.getConstructor(new Class[] {}).newInstance(new Object[] {});
		for(int i=0;i<fields.length;i++){
			System.out.println(fields[i].getName());
			Field field = fields[i];
			String fName = fields[i].getName();
			Object value = null;
			if (field.getType().equals(String.class)) {
				value = String.valueOf(map.get(fName));
				if (value == null || value.equals("null")) {
					value = "";
				}
			}
			/*
			if (field.getType().equals(int.class)) {
				value = String.valueOf(map.get(fName));
				value = Integer.valueOf((value == null || value.equals("null")) ? "1" : "0");
			}
			if (field.getType().equals(java.util.Date.class)) {
				value = Date.valueOf(String.valueOf(map.get(fName)));
			}
			*/
			// 获得属性的首字母并转换为大写,与setXXX对应
			String firstLetter = fName.substring(0, 1).toUpperCase();
			String setMethodName = "set" + firstLetter + fName.substring(1);
			Method setMethod = classType.getMethod(setMethodName, new Class[] { field.getType() });
			setMethod.invoke(oCopy, new Object[] { value });// 调用对象的setXXX方法
		}
		return oCopy;
	}
}

 Map ====> Bean

bean = RequestUtil.convertToBean(map, bean);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics