gpt4 book ai didi

java - 如何对一个常量 "behaves"不同的枚举进行建模?

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:12 48 4
gpt4 key购买 nike

我有一个状态标签,它根据以下内容显示带有彩色边框的消息当前状态。消息本身可能会有所不同(即可以有多个消息到 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;
}
}

这样,枚举值的行为确实有所不同。

关于java - 如何对一个常量 "behaves"不同的枚举进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16670833/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com