ArrayList <integer>抛出NullPointerException </integer>

时间:2012-12-19 08:19:21

标签: java arraylist nullpointerexception

我有一个返回ArrayList <Integer>的方法。当我返回它并且如果它为null我得到nullPointerException。现在我希望进行某种验证并防止空指针异常变为hapenning。

这些是我尝试的,但我仍然得到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 个答案:

答案 0 :(得分:4)

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

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

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

其次,您的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

答案 1 :(得分:1)

如果地图没有关键字条目,get()会返回null 如果您再打电话给.isEmpty()就可以获得NPE。

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

答案 2 :(得分: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())

答案 3 :(得分: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>();

}