我有一個狀態標籤,顯示一條帶有彩色邊框的消息,根據當前狀態 。該消息本身可能會有所不同(也就是說,可能會有多個 消息到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;
}
}
我會很好''assert'或拋出異常。可選地,也許你可以確保如果'status'是'CLEAR',那麼'getStatus()'總是返回'null'(醜陋,我知道) – SJuan76
我不想醜陋:-)。我也希望在編譯時有一個解決方案(在執行時斷言觸發器)。然而,謝謝。 –
在編譯時,我能想到的唯一事情就是實現接口的幾個類。接口定義了'getMessage()'; 'Information'和'Error'有一個接受'String'的構造函數,'Clear'有默認的構造函數。 – SJuan76