我有一个返回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
答案 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>();
}