2012-09-15 71 views
-1

我有這樣的代碼在這裏創建密鑰綁定:減少抽象類

KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0); 
getInputMap(WHEN_IN_FOCUSED_WINDOW).put(k, k.toString()); 
getActionMap().put(k.toString(), new AbstractAction() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     //put action here 
    } 
}); 

的問題是我有這8個在我的計劃。這些都創建一個單獨的類文件來保存抽象類。如果可能的話,我將如何重寫,以限制創建的類的數量。 (我已經搜索了這個,但減少抽象類沒有拿出任何有用的東西)

+9

你爲什麼認爲這是一個問題? – LazyCubicleMonkey

+2

您需要在此處添加更多信息。所有的處理程序都做同樣的事情嗎?它是重複的代碼是問題還是簡單的類的數量? – EdC

+0

爲什麼你想減少類文件的數量?無論如何,你會將它們打包成jar文件。 -1。 –

回答

5

除了擴展名,建議通過here @EdC,可以使用組合物,如本example其中Action使用指定給一個封閉JButton的構造參數。另外,一個Action可以轉發ActionEvent到另一個Action,如KeyPadPanel所示。

+1

好點。我會同意,它更好地贊成組合繼承。這實際上取決於這些行動提供者的內容究竟是什麼,在這種情況下哪個更好。 – EdC

+1

第二個例子是我使用的例子。我意識到這個問題毫無意義,似乎沒有減少班級數量的好方法。你的回答是最好的答案,謝謝。 – Coupon22

3

所以如果你更新的問題或許是一些重複的地方的例子會有什麼幫助。例如。它只是重複的匿名內部類的鍋爐板。如果是這樣,你會被卡住,直到Java 8.或者是有一些重複的方法體的重要部分?

在這種情況下,您可以使用通用代碼添加抽象超類。這實際上會增加班級的數量,儘管這通常不是問題。例如。

private static abstract class MyBaseAction extends AbstractAction { 
    public void actionPerformed(ActionEvent e) { 
     // Do Common Stuff 
     // .... 

     doSpecificStuff(e); 
    } 

    protected abstract void doSpecificStuff(ActionEvent e); 
} 

然後,爲您的匿名內部類子類而不是抽象動作。