我写了这个简单的函数:
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值。
答案 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";