热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java【BeanUtils】Map与Bean的映射

ApacheBeanUtils深拷贝与浅拷贝ApacheBeanUtils常用的三个方法copyProperties(Objectto,Objectfrom):voiddeacr

Apache BeanUtils


  • 深拷贝与浅拷贝
  • Apache BeanUtils常用的三个方法
    • copyProperties(Object to, Object from):void
    • deacribe(Object bean):Map
    • populate(Object bean, Map):void



一:深拷贝与浅拷贝

相关文章:Java - 【序列化】序列化与克隆

测试用例:
在这里插入图片描述

import java.io.*;public class Test {public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {String name = "小明";String gender = "男";int age = 10;String[] cards = new String[]{"建设银行","中国银行"};Person p1 = new Person(name,gender,age,cards);Person p2 = (Person) p1.clone();System.out.println(p1);System.out.println(p2);age = 20;System.out.println(p1);System.out.println(p2);name = "大明";System.out.println(p1);System.out.println(p2);cards[0] = null;System.out.println(p1);System.out.println(p2);/* 深克隆 */Person p3 = (Person) deepClone(p1);System.out.println(p3);cards[0] = "建设银行";System.out.println(p3);}/*** 深克隆测试方法* @param from* @return 克隆出的新对象* @throws IOException* @throws ClassNotFoundException*/public static Object deepClone(Object from) throws IOException, ClassNotFoundException {ByteArrayOutputStream baos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(baos);oos.writeObject(from);ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();}
}

二:Apache BeanUtils常用的三个方法


  • copyProperties(Object to, Object from):void
    • property 属性n
  • describe(Object bean):Map
    • describe 描述vt
  • populate(Object bean, Map):void
    • populate : 填充vt

→ 附加 : BeanUtils中的copyProperties(Object to, Object from) 是浅拷贝,但是和一般使用clone()造成的浅克隆有部分差异;

  • copyProperties() 浅克隆会对数组进行完整克隆,但是引用类型不进行克隆;
  • clone() 浅克隆不会对数组进行克隆,同时也不会对引用类型进行克隆。
    在这里插入图片描述

Test.java

import org.apache.commons.beanutils.BeanUtils;import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;public class Test {public static void main(String[] args) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {// 1. 获取一个MapMap<String,Object> map &#61; new HashMap<>();map.put("name","小明");map.put("GenDer","男");map.put("age",18);String[] hobby &#61; {"篮球", "足球", "羽毛球"};map.put("hobby",hobby);// 2. 将map映射到JavaBean中: populate(Object bean, Map):void// 2.1 映射默认忽略大小写// 2.2 只对map中匹配的键值完成映射&#xff0c;否则填充nullUser user1 &#61; new User();BeanUtils.populate(user1,map);System.out.println(user1);// 3. 将JavaBean映射到map中: deacribe(Object bean):Map// 3.1 注意这里的Map, 键值的类型都是String&#xff0c;这可能直接导致Bean中的数组出现转换异常的问题Map<String,String> map1 &#61; BeanUtils.describe(user1);System.out.println(map1);// 4. JavaBean的拷贝: copyProperties(Object to, Object from):void ---->>>> 浅拷贝Temp temp &#61; new Temp();temp.setTemp1(new Temp1("temp1-hello"));user1.setTemp(temp);User user2 &#61; new User();BeanUtils.copyProperties(user2,user1);System.out.println(user2);hobby[1] &#61; "???";temp.setA("AAA");temp.setTemp1(new Temp1("temp1_world"));System.out.println(user2);}
}

User.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;&#64;Data
&#64;RequiredArgsConstructor
&#64;AllArgsConstructor
public class User {private String name;private String gender;private Integer age;private String[] hobby;private Temp temp;
}

Temp.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;&#64;Data
&#64;RequiredArgsConstructor
&#64;AllArgsConstructor
public class Temp {private String a;private String b;private Temp1 temp1;
}

Temp1.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;&#64;Data
&#64;RequiredArgsConstructor
&#64;AllArgsConstructor
public class Temp1 {private String temp1Value;
}


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
author-avatar
风中摇曳一
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有