当方法返回null时处理Map返回类型

时间:2017-08-04 10:37:33

标签: java

以下方法返回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时如何提供返回方法以克服空指针,因为我们也无法处理它们。

4 个答案:

答案 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;

}