package com.handsome.common.base;public class Dict {
  private int dNo;                 //数据字典序号
  private String dName;            //数据字典名称
  private int dMaxLen;             //数据字典最大长度
  private String dValue;           //数据字典值
  private String dRem;             //数据字典注释
  public Dict() {
  }  public int getDNo() {
    return dNo;
  }
  public void setDNo(int dNo) {
    this.dNo = dNo;
  }
  public String getDName() {
    return dName;
  }
  public void setDName(String dName) {
    this.dName = dName;
  }
  public int getDMaxLen() {
    return dMaxLen;
  }
  public void setDMaxLen(int dMaxLen) {
    this.dMaxLen = dMaxLen;
  }
  public String getDValue() {
    return dValue;
  }
  public void setDValue(String dValue) {
    this.dValue = dValue;
  }
  public String getDrem() {
    return dRem;
  }  public void setDRem(String dRem){
    this.dRem = dRem;
  }
}

解决方案 »

  1.   

    你的程序可真够乱活的。。看看你的main..
    DictOp dic = new DictOp(); // 构造了第一个HashMap,记为M
    dic.initMap(); // 初始化M
    HashMap hr = dic.getMap(); // hr指向第一个HashMap,hr=M
    HashMap sasa = new HashMap(hr); // 将hr(M)中的内容复制到sasa中
    DictOp dic1 = new DictOp(sasa); // dic1中HashMap为sasa,记为M1
    dic1.SetDict(2, "333333"); // 向M1中添加(2,"3333333")
    dict = (Dict) hr.get("dNo"+ 2); // 从M中获取2.从流程上面来说,添加到M1中的内容,你当然不可能从M中取到。
    问题是得到了,所以觉得奇怪?问题只可能出现在一个地方,initMap() <--这里。
    在initMap()的时候,可以确定已经把"2"从xml中初始化到你的M中了..
    证据在这里:
    <<
        dic1.SetDict(2, "333333");    public void SetDict(int dNo, String sVal) {
            Dict dict = null;
            dict = (Dict) datemap.get("dNo" + dNo);
            dict.setDValue(sVal);
            datemap.put("dNo" + dNo, dict);
        }
    >>
    如果没有2,datemap.get(..)return null, dict.setDValue(sVal)会抛出NullPointerException.
    所以,去检查你自己的初始化吧。。另外,程序真够乱的
      

  2.   

    DictOp  dic1  =  new  DictOp(sasa); 我在构造这么类的时候就已经用了新的一个HashMap,在新的类你进行操作,为什么会影响到原来那个类的,例如
               System.out.println(dic.GetDict(2));  
     找理说这里应该取不到那个"222222"的值得
      

  3.   

    <<找理说这里应该取不到那个"222222"的值得>>都给你解释过了,你初始化"2222222"到hr..又通过sasa=new HashMap(hr)复制到dic1..
    你的dic和dic1都有同一份"222222"
      

  4.   

    : xiaohaiz(城里的老土,两眼依然通红!请问我在作这里的时候
    <<
        dic1.SetDict(2, "333333");    public void SetDict(int dNo, String sVal) {
            Dict dict = null;
            dict = (Dict) datemap.get("dNo" + dNo);
            dict.setDValue(sVal);
            datemap.put("dNo" + dNo, dict);
        }
    >>M不是就有原来初始化的值么,我在M1中只是想在写一个“dNo2”的一个新的值为“222222”如果要修改应该怎么修改〉???头痛了一个晚上!
      

  5.   

    <<
    public void SetDict(int dNo, String sVal) {
        String key = "dNo"+dNo;
        if(datemap.containsKey(key)) {
            ((Dict)datemap.get(key)).setValue(sVal);
        }
    }
    >>
    更新一个新的值,这样写就可以了。当然你的dic1得到的还是这份引用。。
       dic                             dic1
    +------------+                   +------------+
    | key2:value |                   | key2:value |
    +------------+                   +------------+
             |                                |
             |                                |
             |      +------------+            |
             +----->| Value"xxx" |<-----------+
                    +------------+
    你的M和M1中的key2的值指向的是相同的一份引用(你初始化时加入的),你在M更新后,M1取的也是这个。