我有一个状态标签,它根据以下内容显示带有彩色边框的消息当前状态。消息本身可能会有所不同(即可以有多个消息到 ERROR
),但 CLEAR
状态不同,因为它永远不应该显示任何消息。
使用示例
setStatus(INFORMATION, "There are new cookies in the jar.");
setStatus(ERROR, "You were to slow.");
setStatus(ERROR, "Stop bugging me, you were to slow.");
clearStatus();
如何对这种异常状态CLEAR
建模?我应该将其从枚举?我已将其包含在枚举中,因为 CLEAR
是有效的状态,但不显示消息。然而客户可以调用:
setStatus(CLEAR, "ups, I gave you a message");
还有哪些其他选项可以对除一个之外的所有值进行建模的值列表性质平等?
public class StatusLabel {
public enum Status {
CLEAR,
INFORMATION,
ERROR;
}
Status status = Status.CLEAR;
public void setStatus(final Status status, final String message) {
assert status != STATUS.CLEAR;
// set status and a show message
this.status = status;
}
public void clearStatus() {
// clear message
status = Status.CLEAR;
}
public Status getStatus() {
return status;
}
}
尽管我认为像 NONE
甚至 null
这样的特殊值是绝对可以的,但对枚举值的不同行为进行建模是没有问题的。您必须考虑,每个值都可以有自己的类,因此它有自己独特的行为。
public class StatusLabel {
public enum Status {
NONE {
public void show(String msg) {
throw new IllegalArgumentException("don't show CLEAR!");
}
},
INFORMATION,
ERROR;
public void show(String msg) {
// do what ever needed
}
}
Status status = Status.NONE;
public void setStatus(final Status status, final String message) {
status.show(message);
this.status = status;
}
public void clearStatus() {
// clear message
status = Status.NONE;
}
public Status getStatus() {
return status;
}
}
这样,枚举值的行为确实有所不同。
我是一名优秀的程序员,十分优秀!