HashMap に問題があります。新しいキーと値のペアが挿入されると、値として格納されている参照が変更されます。
HashMap を使用して、他の方法では非常に階層構造に格納されているオブジェクトにすばやくアクセスします。最初のペアが挿入されたとき、そのアドレスと元のアドレスは同じです。別のペアを追加すると、HashMap に格納されているアドレスが変更されます。そのため、HashMap を介して元のオブジェクトを取得できません。
なぜこうなった?
これは、HashMap を構築する方法のコードです。2 番目の方法では、最初の for ループで上記のことが起こります。
private Map<String, Parameter> createRefMap(Settings settings) {
Map<String, Parameter> result = new HashMap<String, Parameter>();
for (ParameterList parameterList : settings.getParameterList()) {
result.putAll(createRefMap(parameterList, "SETTINGS"));
}
return result;
}
private Map<String, Parameter> createRefMap(ParameterList parameterList, String preLevel) {
Map<String, Parameter> result = new HashMap<String, Parameter>();
String level = preLevel + "/" + parameterList.getName();
for (Parameter parameter : parameterList.getParameter()) {
result.put(level + "/" + parameter.getName(), parameter);
}
for (ParameterList innerParameterList : parameterList.getParameterList()) {
result.putAll(createRefMap(innerParameterList, level));
}
return result;
}
これが私がそれを呼ぶ方法です
this.actRefMap = createRefMap(this.actAppSettings);