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;
}
}
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;
}
}
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.
所以,去检查你自己的初始化吧。。另外,程序真够乱的
System.out.println(dic.GetDict(2));
找理说这里应该取不到那个"222222"的值得
你的dic和dic1都有同一份"222222"
<<
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”如果要修改应该怎么修改〉???头痛了一个晚上!
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取的也是这个。