1

我有一个返回ArrayList <Integer>. 当我返回它并且如果它为 null 我得到一个nullPointerException. 现在我想进行某种验证并防止空指针异常发生。

这些是我尝试过的,但我仍然得到nullpointerexception

Map<Integer,ArrayList<Integer>> personMap = new HashMap<Integer,ArrayList<Integer>>();

public ArrayList<Integer> method(int departmentID){
  if (personMap.get(new Integer(departmentID)) !=null)
     return personMap.get(new Integer(departmentID));
  else 
     return null;


}

我仍然得到nullPointerException.

方法2。

public ArrayList<Integer> method(int departmentID){
  if (personMap.get(new Integer(departmentID)).isEmpty()) return null;
  else return personMap.get(new Integer(departmentID));


}

我仍然得到nullpointerexception. 有人可以帮我解决这个问题吗?

从测试类中,我将调用该方法,如下所示;

Class1 cl = new Class1();

if (c1.method(112121)) // do something
4

4 回答 4

4

首先,您的Map声明将无法编译:-

Map<Integer,ArrayList<Integer>> personMap = new ArrayList<Integer,ArrayList<Integer>>();

你应该new HashMap<Integer,ArrayList<Integer>>();在 RHS 上。

其次,您的if声明将再次无法编译:-

if (c1.method(112121))

method()返回一个ArrayList,而在​​ 中Java,您只能将boolean值作为 中的条件if


需要修改:-

你应该改变你的if: -

if (c1.method(112121) != null)

并使用第一种方法。

事实上,你不需要if-else那里。您可以简单地从地图中返回值:-

public ArrayList<Integer> method(int departmentID){ 
     return personMap.get(new Integer(departmentID));
}

现在,这将返回null,如果键不在 中HashMap,否则将返回对应的ArrayList

于 2012-12-19T08:23:37.117 回答
1

如果地图没有键条目,则get()返回null
如果你再打电话.isEmpty()给你,你会得到一个 NPE。

而是测试map.get(key) == null或更好,!map.contains(key)

于 2012-12-19T08:22:10.980 回答
0

首先,我不建议从方法中返回 null。您应该返回空的 ArrayList。

Map<Integer,ArrayList<Integer>> personMap = new HashMap<Integer, ArrayList<Integer>> ();

public ArrayList<Integer> someMethod(int departmentID){

    if (personMap.get(departmentID) !=null)
        return personMap.get(departmentID);
    else
        return new ArrayList<Integer>();

}
于 2012-12-19T08:43:29.567 回答
0

您的第一种方法与以下方法相同:

public ArrayList<Integer> method(int departmentID){
    return personMap.get(new Integer(departmentID));
}

第二个显然能够抛出 NPE:

public ArrayList<Integer> method(int departmentID){
  if (personMap.get(new Integer(departmentID)).isEmpty()) return null;
  else return personMap.get(new Integer(departmentID));
}

如果personMap.get(new Integer(departmentID))返回 null (它会这样做,当映射没有此键的条目时)然后调用一个抛出 NPE 的方法:

if (personMap.get(new Integer(departmentID)).isEmpty())

于 2012-12-19T08:27:54.150 回答