Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图复制映射时引发NullPointerException_Java_Map_Nullpointerexception - Fatal编程技术网

Java 试图复制映射时引发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(名称、属性);

我试图创建一个XML元素对象,并在构造过程中分配一些属性,但我不断抛出NullPointerException,代码如下:

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);