1
我有一個視圖有幾個「標誌」按鈕(JToggleButton
)。當用戶點擊一個標誌按鈕時,我想更新一個數組來跟蹤哪些按鈕被標記。這是非常簡單的,這裏是我做了什麼:Java:透明地處理狀態改變事件
...
bflag[i].addItemListener(this); //View listens to state change
...
void itemStateChange(ItemEvent ie) {
try {
jtb = (JToggleButton)ie.getSource();
//Update mark array
}
catch (ClassCastException cce) {}
}
這只是正常的,但它是醜陋與try/catch語句。我更喜歡做這樣的事情:
void itemStateChange(ItemEvent ie) {
handleStateChange(ie.getSource());
}
void handleStateChange(JToggleButton jtb) {
//handle state change
}
void handleStateChange(Object o) {}
這是好得多,但唯一的問題是,Object
方法將火,即使源是JToggleButton
(因爲JToggleButton
畢竟是一個Object
) 。
我也考慮過使用雙派遣,但是這將需要覆蓋JToggleButton
方法引發itemStateChange()
,我不知道那是什麼(並且看起來不安全)。
有關如何在沒有嘗試/趕上,有條件檢查等情況下工作的任何建議?
我認爲這是遠高於鑄鐵檢查醜陋的(或至少是同樣難看)。請詳細說明「匿名內部班級」計劃。 – 2011-05-19 13:30:53
@tandu儘管instanceof運算符沒有提高代碼的美感,但最好將異常用作流控制機制。我還用一個使用匿名內部類的例子更新了答案。 – 2011-05-19 13:38:21
匿名內部類需要知道視圖才能更新數組。它沒有。 – 2011-05-19 14:17:31