Java - 如何处理参数传递的空值?

时间:2017-01-03 19:18:11

标签: java nullpointerexception

我写了这个简单的函数:

private String getOperatorForCardinality(String op)
{
    String operator ="";
    if(op!=null)
    {
        if(op.equals(">="))
        {
            operator = ">=";
        }
        else if (op.equals("<="))
        {
            operator = "<=";
        }
    }
    else
    {
        operator = "empty";
    }

    return operator;
}

返回一个字符串。

在主程序中我调用此函数,当参数为null时,编译器显示NullPointerException错误。 原因很清楚,但我不知道如何在参数传递时处理null值。

4 个答案:

答案 0 :(得分:4)

您发布的代码无法投放NPE。错误发生在其他地方,或者您没有运行您认为自己的代码(即避免重新编译等)。

那就是说,你的方法可以简化为:

private static List<String> OPS = Arrays.asList("<=", ">=");  // can add more valid ops

private static String getOperatorForCardinality(String op) {
    if (op == null)
        return "empty";
    return OPS.contains(op) ? op : "";
}

或者,如果你不介意嵌套三元:

private static String getOperatorForCardinality(String op) {
    return OPS.contains(op) ? op : op == null ? "empty" : "";
}

较少的代码通常是更清晰的代码,并且留下更少的潜伏地点。

答案 1 :(得分:2)

它被称为防御性编程,您应该执行以下操作:

private String getOperatorForCardinality(String op) {
    if(null == op) {
        //return null;
        //throw new NullPointerException("...");
    }
    ....
}

您应该考虑您的方法应该如何反应,如果参数为null或抛出异常,需要返回null吗?通常,您无法确定参数永远不会为空,因此您始终要检查并采取措施。

答案 2 :(得分:1)

这不能抛出空指针异常:

private String getOperatorForCardinality(String op)
{
    String operator = "";
    if(">=".equals(op))
    {
        operator = ">=";
    }
    else if ("<=".equals(op))
    {
        operator = "<=";
    } else {
        operator = "empty";
    }

    return operator;
}

答案 3 :(得分:0)

尝试相反

if (op==null)
operator = "empty";