此程序为现有键值返回null。
代码:
File file = new File("document.xml");
JAXBContext context = JAXBContext.newInstance(Document.class);
Unmarshaller unmarshaller=context.createUnmarshaller();
Document document=(Document)unmarshaller.unmarshal(file);
Map<String, String> map=document.getValues();
System.out.println("Values="+map);
System.out.println(map.get("100300IDG"));
输出: -
Values={240400MAHAR=100010101, 100300IDG=44444444, 200200MDM=11221321, 341095TRAVERS=7070070, 340203BRUCKNER=545454, 490423SALEM=64845674, 100490MSC=2222222, 240371PRODUCTION=7777777, 250341FASTENAL=121212}
null
文档类代码。
@XmlRootElement
public class Document {
private Map<String, String> values = new HashMap<String, String>();
//Getter and setter for values
}
包含值的文档文件和这些值将填充到文档对象中。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<document>
<values>
<entry>
<key>240400MAHAR</key>
<value>100010101</value>
</entry>
<entry>
<key>100300IDG</key>
<value>44444444</value>
</entry>
<entry>
<key>200200MDM</key>
<value>11221321</value>
</entry>
</values>
</document>
答案 0 :(得分:4)
一种可能性是Map
返回的document.getValues()
中使用的Key对象打印String
值100300IDG
,但实际上不是String
个实例。因此map.get("100300IDG")
将String
对象与非String对象进行比较(反之亦然)并返回null
,因为找不到任何对象。
这完全取决于document.getValues()
的实施方式。举个例子
private static Map<String, String> getValues() {
Map map = new HashMap<>();
map.put(new MyClass("100300IDG"), "44444444");
return map;
}
...
// with
public class MyClass {
private String string;
public MyClass(String string) {
this.string = string;
}
public String toString() {
return string;
}
}
会打印
{100300IDG=44444444}
但实际上并不包含密钥为"100300IDG"
的条目。
确保您的密钥类型匹配。编译器在这里做不了多少。
或许另一个线程会删除打印和获取之间的条目。