以下方法返回Map。我正在添加一个跳过DAO如何返回值映射的伪代码。
public Map<Intger,Integer> getIDsBasingonRanks(){
Map<Integer,Integer> m = new HashMap<>();
// Dao operation fetcing values from DB;
if(dao==null){
//logging some error or info
return null;// In this cases Null Pointer will be thrown. How to handle it ?
}
m.put()// put the values inside the map from DAO
return m;
}
现在我从另一个返回Map的类调用getIDsBasingonRanks()
并从此地图中获取值
Map<Integer,Integer> m2 = getIDsBasingonRanks();
m2.getkey();//Incase the map is null we will have Null Pointer Exception
m2.getValue(); //Incase the map is null we will have Null Pointer Exception
在dao = null条件下处理上述方法的return语句我感觉很棘手。当返回null时如何提供返回方法以克服空指针,因为我们也无法处理它们。
答案 0 :(得分:5)
一种可能性是可选。
public Optional<Map<Integer, Integer>> getIDsBasingonRanks() {
Map<Integer, Integer> m = new HashMap<>();
... // Dao operation fetcing values from DB;
if (dao == null) {
return Optional.empty();
}
... // put the values inside the map from DAO
return Optional.of(m);
}
getIDsBasingonRanks().ifPresent(m ->
{
... m.get(42) ...
});
int y = getIDsBasingonRanks().map(m -> m.get(42)).orElse(13);
答案 1 :(得分:2)
在您的方法中获得null
值是您不期望的? 抛出异常。你可以创建一些自定义,让我们说,IDNotFoundException
,扔掉并抓住它。请注意,异常只是您可以用作程序员的另一种资源。唯一危险的例外是你没有抓到的
另一方面,如果null
值具有&#34;可接受的&#34;但是你要小心,你可以将它包装在Optional
答案 2 :(得分:1)
您的getIDsBasingonRanks
方法有点不清楚,看起来如果读操作失败了,您将记录错误并返回null
。
如果是这种情况,我会使用简单的null
检查方法:
Map<Integer,Integer> m2=getIDsBasingonRanks();
if(m2 != null){
m2.getkey();
m2.getValue();
}
答案 3 :(得分:1)
如果您不想返回空值,则始终可以使用Collections类返回空地图,因此您的代码将变为:
public Map<Intger,Integer>getIDsBasingonRanks(){
Map<Integer,Integer> m =new HashMap<>();
// Dao operation fetcing values from DB;
if(dao==null){
//logging some error or info
}
return Collections.emptyMap();// In this case you are returning and empty map which is better
}
m.put()// put the values inside the map from DAO
return m;
}