空字符串表示对象状态

时间:2014-08-06 13:50:01

标签: java string state

我不时碰到这样的代码:

...
private final JButton addButton = new JButton(...);
private String warningMsg = "";

private void update(){
    addButton.setEnabled(warningMsg != null && warningMsg.isEmpty());
}
...

如您所见,warningMsg可能包含警告信息。如果不需要任何消息,它将保留空字符串"" /基于此行为,启用或禁用按钮。

有两件事困扰着我。首先,如果不需要字符串,为什么不将warningMsg设置为null?我认为null是一个更好的选择,因为空字符串对我来说仍然是一个有效的字符串。局外人不知道他必须检查空虚,但如果字符串为空,那就是他能看到的东西。其次,行为是基于字符串的内容,在我看来,编码很差。

问题主要是关于第一个问题。你认为空字符串是一个很好的选择,表示"没有",这实际上是一个特定的对象状态?

1 个答案:

答案 0 :(得分:1)

  

问题主要是关于第一个问题。你认为空字符串是一个很好的选择,表示"没有",这实际上是一个特定的对象状态?

空字符串是显示的完美选择。您只需将其放入GUI中,而无需每次都进行空值检查。

但是:显示字符串是保持对象状态的不良选择。如果有警告,你应该有某种数据模型保持状态。这应该是(唯一的)源代码,用于控制器的"启用" -state。 对于"局外人来说,这也更加清晰。当你打电话给他们。

boolean DataModel.hasWarning() - 类似的东西......