最近开发中遇到这样一个问题将父类的属性值copy到子类中,从而对子类添加一些其他属性。

父类:

package com.jalja.org.jms.test01;

import java.util.Date;

public class User {
private Integer id;
private String name;
private Date time;
public User() {
super();
}
public User(String name, Date time) {
super();
this.name = name;
this.time = time;
}
public User(Integer id, String name, Date time) {
super();
this.id = id;
this.name = name;
this.time = time;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}

子类:

package com.jalja.org.jms.test01;

public class UserVO extends User{
private int sex;
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
}
package com.jalja.org.jms.test01;

import java.lang.reflect.Field;
import java.util.Date; public class CopyObj {
/**
* 我们的业务是需要在现有的类上扩展一些属性供视图层使用
* 1、在原有类上扩展一些属性也可以实现,但这样需要在别人的代码中直接更改,个人认为不是很好。
* 2、写一个扩展类 UserVO 继承原类 User
* @param args
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
User user=new User("2131",new Date());
//将父类强转为子类出现异常Exception in thread "main" java.lang.ClassCastException:
//UserVO vo1=(UserVO) user;
//vo1.setSex(0); UserVO vo2=(UserVO) copyObj(user,new UserVO());
vo2.setSex(0);
System.out.println(vo2.getName()); }
/** 子对象copy父对象的属性值
* copyObj 继承 targetObj
* @param targetObj 被copy的目标对象
* @param copyObj copy后的对象
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static <T> T copyObj(T targetObj,T copyObj ) throws IllegalArgumentException, IllegalAccessException{
Field [] fields=targetObj.getClass().getDeclaredFields();
Field [] fieldsvo=copyObj.getClass().getSuperclass().getDeclaredFields();
for(Field f:fields){
f.setAccessible(true);
for(Field f2:fieldsvo){
f2.setAccessible(true);
if(f.get(targetObj)!=null&& f.getName().toString().equals(f2.getName().toString())){
f2.set(copyObj,f.get(targetObj)) ;
}
}
}
return copyObj;
}
}

父类属性值的copy的更多相关文章

  1. spring mvc 处理pojo传递对象时该对象继承父类的属性在网络接收端接收该属性值总是null,why?

    //=========================== 情形一: ===============================//在网络上传递User1类对象时info属性值在网络的另一端能够接 ...

  2. java反射获取和设置实体类的属性值 递归所有父类

    最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...

  3. iOS修改声明为readonly的属性值

    本文讨论的是,对于类中声明为 readonly 的属性值,我们就不可以修改其值了么?如何可以,那么如何修改呢? 为了便于说明,定义一个 ACLStudent 的类: ACLStudent.h @int ...

  4. Objective-C中变量采用@property的各个属性值的含义

    我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值.但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量 ...

  5. 为啥NSString的属性要用copy而不用retain

    之前学习生活中,知道NSString的属性要用copy而不用retain,可是不知道为啥,这两天我研究了一下,然后最终明确了. 详细原因是由于用copy比用retain安全,当是NSString的时候 ...

  6. java自定义注解知识实例及SSH框架下,拦截器中无法获得java注解属性值的问题

    一.java自定义注解相关知识 注解这东西是java语言本身就带有的功能特点,于struts,hibernate,spring这三个框架无关.使用得当特别方便.基于注解的xml文件配置方式也受到人们的 ...

  7. GDAL C#读取shp中文属性值乱码问题

    GDAL的C#版本读取shp中,如果属性值中含有中文,读出来有可能是乱码的问题,根据SWIG生成的C#代码调试发现问题所在,在Ogr.cs文件中有这么一个函数,代码如下: internal stati ...

  8. 将source类中的属性值赋给target类中对应的属性

    /** * 对象的属性值拷贝 * <p> * 将source对象中的属性值赋值到target对象中的属性,属性名一样,类型一样 * <p> * example: * <p ...

  9. 【java】之Method和Field反射获取和设置属性值

    package com.javaluna.reflect; import java.lang.reflect.Field; import java.lang.reflect.Method; impor ...

随机推荐

  1. linux静态链接库

    库 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载 ...

  2. 上海Uber优步司机奖励政策(1月11日~1月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. [数据结构]_[C/C++]_[链表的最佳创建方式]

    场景 1.链表在C/C++里使用非常频繁, 因为它非常使用, 可作为天然的可变数组. push到末尾时对前面的链表项不影响. 反观C数组和std::vector, 一个是静态大小, 一个是增加多了会对 ...

  4. xencenter迁移云主机方法

    问题:POOL中计算节点内存不足. 解决方法:1.为计算节点添加内存(费用高)2.将部分资源迁移到其它POOL中. 方法: 1.选择要迁移的虚拟机 2.选择保存路径 这里可以看到可以批量导出: 注意: ...

  5. 关于DataTable.Select方法偶尔无法正确查到数据的处理方法

    项目中经常用DataTable在内存中存储并操作数据,在进行报表开发的时候,报表的各种过滤功能用这个内存表可以大现身手,但最近在使用过程中却遇到一个奇怪的现象,现将该问题及处理方法记录一下.这是在做护 ...

  6. OSG-交互

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  7. 树莓派 Raspberry Pi 与 micro:bit起手式

    本文将学习如何在Raspberry Pi上安装MicroPython编辑器mu,并将MicroPython中编写的程序从您的Raspberry Pi推送到micro:bit. 您需要: 硬件, 带有S ...

  8. Django2.1新手图文入门教程

    第一个django Web Django2.1新手图文入门教程 http://www.liujiangblog.com/blog/36/

  9. [问题] docker: Failed to start Docker Application Container Engine.

    docker无法启动: # systemctl restart docker Job for docker.service failed because the control process exi ...

  10. 关于TensorFlow的GPU设置

    摘自:https://blog.csdn.net/byron123456sfsfsfa/article/details/79811286 1.  在使用GPU版的TensorFlow跑程序的时候,如果 ...