两个对象的相同属性赋值

转:https://www.cnblogs.com/bjzhanghao/archive/2004/07/30/28607.html#

利用BeanUtils在对象间复制属性

commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理。我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度(什么,你的薪水按代码行数计算?那千万别让老板看到此帖哦)

BeanUtils是这个包里比较常用的一个工具类,这里只介绍它的copyProperties()方法。该方法定义如下:

public static void copyProperties(java.lang.Object dest,java.lang.Object orig)
  throws java.lang.IllegalAccessException,
         java.lang.reflect.InvocationTargetException
如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());

//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);
而使用BeanUtils后,代码就大大改观了,如下所示:
//得到TeacherForm
TeacherForm teacherForm=(TeacherForm)form;
//构造Teacher对象
Teacher teacher=new Teacher();
//赋值
BeanUtils.copyProperties(teacher,teacherForm);
//持久化Teacher对象到数据库
HibernateDAO=;
HibernateDAO.save(teacher);

如果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的copyProperties()后还要加上一句:

teacher.setModifyDate(new Date());

怎么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些。BeanUtils支持的转换类型如下:

  • java.lang.BigDecimal
  • java.lang.BigInteger
  • boolean and java.lang.Boolean
  • byte and java.lang.Byte
  • char and java.lang.Character
  • java.lang.Class
  • double and java.lang.Double
  • float and java.lang.Float
  • int and java.lang.Integer
  • long and java.lang.Long
  • short and java.lang.Short
  • java.lang.String
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp

这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。

一、资源包括:JET手册(参数篇、导入篇、对象字典篇、通信功能篇)、FX5U+JET(Basic)FB功能块使用说明文档、FB样例程序、JET伺服参数二、MR-JET-G伺服放大器根据CiA 402驱动器轨迹的Index来分配对象。FX5U PLC通过CCLINK IE Field Basic网络访问被分配的对象,可以驱动伺服电机。三、样例FB块可实现轨迹速度、轨迹位置、原点回归以及一些暂停、急停、复位、状态监视、报警输出等控制。三菱FX5U PLC是一种先进的可编程逻辑控制器,具备高速处理能力和丰富的指令集,广泛应用于自动化控制系统。MR-JET-G伺服放大器则是三菱电机生产的高性能伺服驱动器,它能够提供精确的速度和位置控制,适用于多种工业应用。CC-Link IE Basic是一种工业以太网技术,它为工业自动化提供了高速的数据通信网络。在三菱FX5U PLC与MR-JET-G伺服放大器的结合应用中,FB功能块(功能块)是关键的技术组件,它实现了PLC与伺服驱动器之间的高效数据交互和控制。JET手册详细介绍了MR-JET-G伺服放大器的参数设置、导入流程、对象字典以及通信功能等方面的知识。参数篇解释了如何配置伺服放大器的不同参数以适应不同的应用需求;导入篇则提供了将伺服参数导入PLC的步骤;对象字典篇讲述了伺服放大器内各种参数的标识和定义;通信功能篇详细说明了通过CC-Link IE Basic网络进行数据通信的方法和协议细节。接下来,FX5U+JET(Basic)FB功能块使用说明文档为用户提供了关于如何在FX5U PLC上实现与MR-JET-G伺服放大器通信的具体指导。它详细解释了各个FB功能块的功能、参数设置以及它们在实现伺服控制时的作用。这些FB功能块是为实现特定控制功能而设计的程序模块,如轨迹速度、位置控制、原点回归等,它们能够通过简单的参数配置来完成复杂的控制任务。FB样例程序则提供了直接可用的编程示例,用户可以通过这些样例程序快速搭建起自己的控制系统。通过这些样例,工程师和系统集成者可以更直观地理解如何在实际项目中应用FB功能块,进行轨迹速度的设定、轨迹位置的控制、原点回归操作,以及实现暂停、急停、复位、状态监视和报警输出等控制功能。JET伺服参数是指MR-JET-G伺服放大器中设置的具体参数,这些参数定义了伺服电机的运行特性,如速度、加速度、减速度、位置等。在三菱FX5U PLC与MR-JET-G伺服放大器通信过程中,通过配置和调整这些参数,可以实现对伺服电机的精确控制,以适应不同的应用场景和要求。在三菱FX5U PLC通过CC-Link IE Field Basic网络访问被分配的对象时,能够驱动伺服电机进行精确控制。CC-Link IE Field Basic作为工业通信网络,为FX5U PLC与MR-JET-G伺服放大器的连接提供了稳定、高速的数据通信能力,确保了伺服电机控制的响应速度和精度。三菱FX5U PLC和MR-JET-G伺服放大器通过FB功能块的运用,结合CC-Link IE Basic网络通信技术,可以构建一个高性能的伺服电机控制系统。这套系统不仅能够实现复杂的运动控制,还能够通过网络实现远程监控和故障诊断,大大提高了工业自动化系统的灵活性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值