lastDataMap的clone()函数是假的,它没有真正的实现克隆。你要自己写这个函数,里面new一个新的lastDataMap对象返回

解决方案 »

  1.   

    我的lastDataMap是由HashMap通过new 生成的,我是不是要写一个继承HashMap的子类,然后在这个子类重新写clone()方法,然后在程序中由子类来实例化lastDataMap,应该是这样写吧,
    方法是这样写吗?
    public Object clone(){
            HashMap o = null;
            try{
                o = new HashMap();
            }catch(Exception e){
                e.printStackTrace();
            }
            return o;
        }
      

  2.   

    是的,修改如下,要把原来的值全部传过去.
    我假设你的这个method在你已经继承了HashMap的类里面,那么可以掉用this.get(xx)等HashMap的方法
    public Object clone(){
    HashMap o = null;
    try{
    o = new HashMap();
            Set set = this.keySet();
            Object[] obj = set.toArray(new Object[0]);
            for(int i=0; i<obj.length; i++) {
                o.put(obj[i],this.get(obj[i]));
            }
    }catch(Exception e){
    e.printStackTrace();
    }
    return o;
    }
      

  3.   

    to happyegg(想转型的程序员):
    我按你的方法运行,好象还是不行,因为我的hashmap里存的是vector,所以是不是还要对vector的clone()方法进行重写?
    我继承类是这样写的:
    package com.convision.nms.util;import java.util.HashMap;
    import java.util.Set;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    public class NmsHashMap extends HashMap implements Cloneable{
        public NmsHashMap() {
            super();
        }    public Object clone(){
            HashMap o = null;
            try {
                o = new HashMap();
                Set set = this.keySet();
                Object[] obj = set.toArray(new Object[0]);
                for (int i = 0; i < obj.length; i++) {
                    o.put(obj[i], this.get(obj[i]));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return o;
        }
    }