我有一个状态标签,显示带有彩色边框的消息
当前状态。消息本身可以变化(即可以有多个
邮件到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;
}
}
答案 0 :(得分:1)
即使我认为像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;
}
}
这样,枚举值真的表现不同。
答案 1 :(得分:0)
我会在Status枚举“displaysMessage”上放置一个属性。然后,您可以询问状态枚举是否应显示消息。