我不时碰到这样的代码:
...
private final JButton addButton = new JButton(...);
private String warningMsg = "";
private void update(){
addButton.setEnabled(warningMsg != null && warningMsg.isEmpty());
}
...
如您所见,warningMsg
可能包含警告信息。如果不需要任何消息,它将保留空字符串""
/基于此行为,启用或禁用按钮。
有两件事困扰着我。首先,如果不需要字符串,为什么不将warningMsg
设置为null
?我认为null
是一个更好的选择,因为空字符串对我来说仍然是一个有效的字符串。局外人不知道他必须检查空虚,但如果字符串为空,那就是他能看到的东西。其次,行为是基于字符串的内容,在我看来,编码很差。
问题主要是关于第一个问题。你认为空字符串是一个很好的选择,表示"没有",这实际上是一个特定的对象状态?
答案 0 :(得分:1)
问题主要是关于第一个问题。你认为空字符串是一个很好的选择,表示"没有",这实际上是一个特定的对象状态?
空字符串是显示的完美选择。您只需将其放入GUI中,而无需每次都进行空值检查。
但是:显示字符串是保持对象状态的不良选择。如果有警告,你应该有某种数据模型保持状态。这应该是(唯一的)源代码,用于控制器的"启用" -state。 对于"局外人来说,这也更加清晰。当你打电话给他们。
boolean DataModel.hasWarning()
- 类似的东西......