如何对一个常量“表现”不同的枚举进行建模?

时间:2013-05-21 13:07:49

标签: java enumeration

我有一个状态标签,显示带有彩色边框的消息 当前状态。消息本身可以变化(即可以有多个 邮件到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;
    }
}

2 个答案:

答案 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”上放置一个属性。然后,您可以询问状态枚举是否应显示消息。