HashMap转JavaBean,2024年大厂程序员进阶宝典

文章介绍了两种Java映射技术,一种是通过字段名映射Map到Bean,解决首字母大小写问题,另一种是将Map中的键值对赋值给对象属性,包括基本类型和复杂类型处理。同时提及了Java面试中常见的技术点,如分布式架构、Spring、MyBatis等。
摘要由CSDN通过智能技术生成

//获取属性的名字

String name = pd.getName();

//判断是否有这个属性

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);

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

写在最后

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!

Java经典面试问题(含答案解析)

阿里巴巴技术笔试心得

**
[外链图片转存中…(img-Izx83AMQ-1711047835409)]

Java经典面试问题(含答案解析)

[外链图片转存中…(img-lUsoDTG9-1711047835410)]

阿里巴巴技术笔试心得

[外链图片转存中…(img-CUQNSX3x-1711047835410)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值