在Java中构建Map的正确方法?

时间:2013-01-08 21:12:57

标签: java map constructor setter getter

我正在尝试在可以全局使用的辅助bean中创建可变映射。这就是我使用它的方式:

private Map<Object, Date> myMap;

public void myMethod(){
      getMyMap().put(myObject, myDate);
    //I have also tried the following with the same results:
    //myMap.put(myObject, myDate);
}

//setter
public void setMyMap(Map<Object, Date> myMap) {
      this.myMap= myMap;
}

//getter
public Map<Object, Date> getMyMap() {
    return myMap;
}

myMap的setter和getter是从我正在使用的程序自动生成的(自动设置并为其他一切工作)。

当我尝试填充Map时出现错误。它返回一个空指针异常。代码显然是简化的,但如果您需要更多信息,我很乐意给它。

使用以下方法解决了我的问题:

    private Map<Object, Date> myMap = new HashMap<Object, Date>();

public void myMethod(){
    myMap.put(myObject, myDate);
}

如果有人有更多建议,我会非常乐意听到它。

4 个答案:

答案 0 :(得分:4)

我几乎肯定你在这里有设计缺陷。为map提供getter和setter是非常罕见的。您应该将map作为构造函数参数,而是公开putget方法。例如,这将清除此错误的可能性。

答案 1 :(得分:3)

您确定setMyMap被调用了吗?如果没有,那么myMap在使用时将为null

如果您希望地图具有“默认”值,则应将其初始化为:

private Map<Object, Date> myMap = new HashMap<Object, Date>();

答案 2 :(得分:0)

private Map<Object, Date> myMap;

因为myMap指向null

1)您需要在更新mmap之前执行setMyMap

(或)

2)将地图声明更改为

private Map<Object, Date> myMap = new HashMap<Object, Date>();

答案 3 :(得分:0)

在使用setMyMap(newMap)

设置变量之前,变量myMap将为null