有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我编写了这个简单的函数:

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


共 (4) 个答案

  1. # 1 楼答案

    反其道而行之

    if (op==null)
    operator = "empty";
    
  2. # 2 楼答案

    这不能引发空指针异常:

    private String getOperatorForCardinality(String op)
    {
        String operator = "";
        if(">=".equals(op))
        {
            operator = ">=";
        }
        else if ("<=".equals(op))
        {
            operator = "<=";
        } else {
            operator = "empty";
        }
    
        return operator;
    }
    
  3. # 3 楼答案

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

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

    您应该考虑您的方法应该如何反应,如果参数为null,是否需要返回null或引发异常?通常情况下,您无法确保参数永远不会为null,因此必须始终进行检查并采取措施

  4. # 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" : "";
    }
    

    更少的代码通常更清晰,留下更少的地方让bug潜伏