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

628mspwn  于 2021-07-12  发布在  Java
关注(0)|答案(4)|浏览(334)

这个问题在这里已经有答案了

什么是nullpointerexception,如何修复它(12个答案)
四年前关门了。
我写了一个简单的函数:

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错误。原因很清楚,但我不知道如何处理参数传递的空值。

kxxlusnw

kxxlusnw1#

你发布的代码不可能抛出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" : "";
}

更少的代码通常是更清晰的代码,留给bug潜伏的地方也更少。

toiithl6

toiithl62#

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

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

您应该考虑您的方法应该如何React,如果参数为null,是否需要返回null或抛出异常?通常你不能确定一个参数永远不会为空,所以你必须检查并采取行动。

o2g1uqev

o2g1uqev3#

这不能引发空指针异常:

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

    return operator;
}
i2loujxw

i2loujxw4#

尝试相反方向

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

相关问题