返回null还是空字符串?

来自软件实验室
跳转至: 导航搜索

问题描述

在设计Model类时,常见的代码是:

public String getAddr(){
    return this.addr;
}

public String getLongAddr() {
    return this.longAddr();
}

addr属性在前台页面的一个场景:

<span>#{order.addr}</span>

当this.addr属性为null时,前台页面会显示一个null字符串。

getAddr在后台的一个场景:

String myAddr = getAddr() == null ? "" : getLongAddr();

下面是另外一个写法:

public String getAddr(){
    return this.addr == null ? "" : this.addr;
}

public String getLongAddr() {
    return this.longAddr();
}

这种写法,在前台页面引用addr属性时就不会显示null了,而是显示一个空白。但是,后台的代码要相应的修改为:

String myAddr = (getAddr() == null || getAddr().isEmpty()) ? "" : getLongAddr();

否则,myAddr会漏掉addr == ""这种情况。

小结

如果对象可能为null,任何时候都养成同时判断对象是否为null和empty两种情况的习惯,这样无论model类如何编写,后台代码都足够健壮。