Java 试图复制映射时引发NullPointerException
我试图创建一个XML元素对象,并在构造过程中分配一些属性,但我不断抛出NullPointerException,代码如下:Java 试图复制映射时引发NullPointerException,java,map,nullpointerexception,Java,Map,Nullpointerexception,我试图创建一个XML元素对象,并在构造过程中分配一些属性,但我不断抛出NullPointerException,代码如下: public XML.Element newElement(String name, Map<String, String> attributes) { return new ElementImpl(name, attributes); } public XML.Element新元素(字符串名称、映射属性){ 返回新的ElementImpl(名称、属性);
public XML.Element newElement(String name, Map<String, String> attributes) {
return new ElementImpl(name, attributes);
}
public XML.Element新元素(字符串名称、映射属性){
返回新的ElementImpl(名称、属性);
}
召唤
public class ElementImpl implements XML.Element {
private Map<String, String> attributes = new LinkedHashMap<String, String>();
public ElementImpl(String name, Map<String, String> attributes) {
...
this.attributes.putAll(attributes);
}
public类ElementImpl实现XML.Element{
私有映射属性=新LinkedHashMap();
公共元素impl(字符串名称、映射属性){
...
this.attributes.putAll(attributes);
}
通过调试器,它显示“this”为null。有人能解释一下我哪里出错了吗?我建议您删除putAll方法,而不是分配变量。这是构造函数,所以这是您第一次在此实例上放置数据 另外,您确定在创建LinkedList时没有出现任何错误吗?至少我所知道的Java类只能接受一个参数,您可以添加两个参数
public class ElementImpl implements XML.Element {
private Map<String, String> attributes;
public ElementImpl(String name, Map<String, String> attributes) {
this.attributes = attributes;
}
}
这样你就可以得到你的副本。
这个
为null
听起来不太可能。你能给出一个有这个问题的完整的小例子吗?你是否将参数(属性)分配给你的实例变量(属性)??你做错了的是你没有读取堆栈跟踪。NullPointerException at Blah(Blah.java:1234)
这里1234是行号。@jlordo.My bad,edited.@nom:鉴于您以一种方式编辑了问题,我不确定我们是否能真正相信它的其余部分是有效的。请您发布一个简短但完整的程序来演示问题?这样,对原始地图的所有更改都将反映在该地图上,因为因为他们都引用了同一个对象。我很确定OP不想有这种行为,这就是为什么他试图创建地图的真实副本。这成功了,非常感谢!感谢所有其他人的建议。
this.attributes = new LinkedHashMap(attributes);