/**
* Map转换成实体类的方法
* @author zhangfan
* @param <T> 转换成的javaBean
* @param <K> key的类型
* @param <V> value的类型
*
*/
public static <T, K, V> T convertMap(Class<T> type, Map<K,V> map)
throws IntrospectionException, IllegalAccessException,
InstantiationException, InvocationTargetException {
BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性
T obj = type.newInstance(); // 创建 JavaBean 对象
// 给 JavaBean 对象的属性赋值
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (int i = 0; i< propertyDescriptors.length; i++) {
PropertyDescriptor descriptor = propertyDescriptors[i];
String propertyName="";
if (!descriptor.getClass().equals("String")) {
propertyName =String.valueOf(descriptor.getName());
}else {
propertyName = descriptor.getName();
}
if (map.containsKey(propertyName)) {
// 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
Object value = map.get(propertyName);
Object[] args = new Object[1];
args[0] = value;
try {
descriptor.getWriteMethod().invoke(obj, args);
} catch (IllegalArgumentException e) {
System.err.print("类型转换失败");
}
}
}
return obj;
}