1

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

2 回答 2

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;
        }
    }

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

于 2013-05-21T16:47:48.920 回答
0

我会在状态枚举“displaysMessage”上放置一个属性。然后,您可以询问 Status 枚举是否应该显示该消息。

于 2013-05-21T14:21:37.417 回答