if (map.containsKey(name)){
//获取属性的 写的方法
Method wMethod = pd.getWriteMethod();
if (pd.getPropertyType() == int.class){
wMethod.invoke(obj,Integer.valueOf(map.get(name).toString()));
}else if (pd.getPropertyType() == double.class){
wMethod.invoke(obj,Double.valueOf(map.get(name).toString()));
}else {
wMethod.invoke(obj,map.get(name));
}
}
}
return obj;
}
2、方式一升级款
//map转换成Bean,只要Map键和JavaBean属性名一致即可,解决mapToBean因为单个首字母大写,映射找不到属性的问题
public static <T, V> T mapToBeanByField(Map<String,V> map,Class clz) throws Exception{
T obj = clz.newInstance();
Field field = null;
for(String key : map.keySet()) {
field = obj.getClass().getDeclaredField(key);
field.setAccessible(true);
field.set(obj, map.get(key));
}
return obj;
}
3、方式二
/**
-
实现键值对集合中将对应的键值,赋值给目标对象的属性
-
前提:键的值必须和目标对象的属性名一致,基本数据类型必须是字符串格式!!!
-
可以实现任意类型的赋值
-
@param map 键值对集合
-
@param o 要赋值的目标对象
*/
public static Object copyValue(HashMap<String,Object> map,Object o){
Class c=o.getClass(); //创建目标对象的class对象
Field[] fields=c.getDeclaredFields(); //得到目标对象的所有属性
for (Field f : fields) { //遍历属性集合
if(map.get(f.getName())!=null){//如果属性名在集合中,有对应的键值对 进入赋值处理
String methodName=“set”+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1);
//拼接set方法的名字
try {
Method m=c.getDeclaredMethod(methodName, f.getType());//创建set方法的method对象
Object par=map.get(f.getName()); //通过键得到值的对象 执行set方法赋值时 作为参数传递
Class typeClass=f.getType(); //得到属性的类型的class对象
if(typeClass.isPrimitive()){ //判断是否为基础数据类型 基础数据类型需要特殊处理
String p=(String)par; //所有的基本类型都可以转换为string
if(“int”.equals(typeClass.getName())){ //int的包装类名字特殊 需要单独处理
par=Integer.parseInt§;
} else if(“char”.equals(typeClass.getName())){//char的包装类名字特殊 需要单独处理
par=p.charAt(0); //char类型只能存储一个字符 所以直接截取
}else{
//除了int和char外 其他包装类都是基本类型名首字母大写 可以利用反射调用对应的parse方法 实现转换为基本数据类型
String className=typeClass.getName().substring(0,1).toUpperCase()+typeClass.getName().substring(1);
//将基本类型名首字母大写 拼接成包装类名
Class packageClass=Class.forName(“java.lang.”+className);//通过类名得到对应的包装类class对象
Method parseMethod=packageClass.getDeclaredMethod(“parse”+className, String.class);//得到对应的parse方法
par= parseMethod.invoke(par, p);//调用parse方法 将字符串转换为对应的基本数据类型
}
}else{ //如果不是基本数据类型 直接调用属性类型的class对象的cast方法 将参数直接强转为,属性类型的对象
par=typeClass.cast(par);
}
m.invoke(o, par); //执行set方法赋值 par已经是处理完 和属性类型,对应的类型的值
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return o;
}
二、利用反射HashMap转Bean
public static <T,V> List listMapToBean(Map<String, Map<String, HashMap<String, String>>> hashMap,Class clz1,Class clz2) throws Exception {
List list = new ArrayList();
Map<String,HashMap<String,String>> hashMapMid = null;
T c1;
V c2;
Field field = null;
for(String keyOut : hashMap.keySet()) {
hashMapMid = hashMap.get(keyOut);
c1 = clz1.newInstance();
for(String keyMid : hashMapMid.keySet()) {
c2 = map2bean(hashMapMid.get(keyMid),clz2);
field = c1.getClass().getDeclaredField(keyMid);
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!