比如现有一个用户对象User,其属性有userid,username,userage(实际很多属性,这里简化)然后创建两个对象,user1与user2,分别赋值如下:
user1.setUserid(1);
user1.setUsername("name1");user2.setUserid(1);
user2.setUserage(20);我如何把user2中的年龄拷贝到user1中去呢?当然,正常的做法是:user1.setUserage(user2.getUserage());//这个不算
由于属性很多,如果都这样写的话,显然麻烦些,不知道有没更方便的方法呢?

解决方案 »

  1.   

    重写克隆函数
    protected native Object clone() throws CloneNotSupportedException;
    http://pengcqu.javaeye.com/blog/493120
      

  2.   

    1.将user实现Cloneable接口
    2.在user中实现clone()方法
    3.在clone方法中直接写:super.clone()。 
    4.然后就克隆对象就行了User u2 = (User)user1.clone();    
      

  3.   

    克隆好像有点问题,如你这里user1克隆出的u2,其实相当于把user1里所有的属性值都给了u2了,
    而我实际并不想要user1所有的属性,只是要其中的一部分,如本处我只要userage,其它都不要.
    不知道我这样理解对不对?(克隆方法还没去实验)
      

  4.   

    克隆等于全部属性值都给了u2了
    如果你只是部分属性值
    还是老老实实用set方法吧~
      

  5.   

    办法是有的,只不过比较麻烦!
    如果你不想要恢复哪些字段,你就把哪些字段设置成为transient。
    然后通过ObjectOutStream对象,通过writeObject(user1);
    写出。
    然后通过ObjectInputStream的user2=(user)readObject();
    读入,那么user2,就是你想要的结果!
    这方法有点恶心!嘿嘿
      

  6.   

    不是这样的啊,如果全有了,那我根本不用克隆啊,直接用user1进行相关操作就行了(实际中我不存在不克隆的会产生其它问题).
      

  7.   

    如果都要某一个字段都要相同,那么用static限定一下就是了,改变一个对象,其他对象的该属性都会改
      

  8.   

    复制的话就用clone吧我以前做的时候就是用的这个
      

  9.   

    你看看这个例子/* 简单类克隆实现
         * 要实现克隆,必须实现Cloneable接口,这是一个标识接口,没有接口方法
         * 实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
         * 按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
         */
        public class CloneFooA implements Cloneable {
            private String strA;
            private int intA;        public CloneFooA(String strA, int intA) {
                this.strA = strA;
                this.intA = intA;
            }        public String getStrA() {
                return strA;
            }        public void setStrA(String strA) {
                this.strA = strA;
            }        public int getIntA() {
                return intA;
            }        public void setIntA(int intA) {
                this.intA = intA;
            }        /**
             * @return 创建并返回此对象的一个副本。
             * @throws CloneNotSupportedException
             */
            public Object clone() throws CloneNotSupportedException {
                //直接调用父类的clone()方法,返回克隆副本
                return super.clone();
            }
        }
      

  10.   

    克隆方法是可行了,不过有几个问题还是要注意的。
    clone是把原对象的值完全地拷贝到克隆的新对象中,如果类中只有基本类型时没有关系,但类中有引用类型时, 就会出现问题(多个引用指向同一个对象)。不过,要看你的clone方法怎么个写法了。你可针对类中对象类型做特殊处理。
    如克隆多利羊的例子:
    public class Sheep implements Clonable {
        private String name;
        private Date birth;   //做特殊处理    public Object clone() throws .. {
           Sheep s = (Sheep) super.clone();
           s.setBirth(birth.clone());       return s;
        }
    }
      

  11.   

    用:a=Ext.apply(a,b);这样就可以将集合b中的元素拷贝到集合a中去了,你可以详情看一下Ext.apply和Ext.applyIf得区别。