[英]Java - As Method or Inner Class or Class?
所以我偶然發現了幾種實現ActionListener的方法,我想知道是否有人可以告訴我每種方法的不同之處以及是否有理由或優勢來使用其中一種方法?
第一個是在一段代碼中:
public void actionPerformed(ActionEvent arg0) {
// CODE HERE
}
我看到的第二種方式是在另一個代碼塊中:
private class myListener implements ActionListener {
// CODE HERE
}
第三個是ActionListener的一個單獨的類,它具有與上面類似的代碼,但是在一個單獨的類中。
我想知道的方法方法是否是新的對象不必為每個要創建更有效,你只需簡單地引用this
作為的ActionListener而不是,例如,引用new myListener()
謝謝。
任何選項的速度都沒有區別; 你總會有一個實現ActionListener接口的對象。 避免單獨類的實例只會節省幾個字節的內存。
您的選擇應該基於對您的代碼有意義的結構。 例如,讓你的公共類實現ActionListener對於那些使用該類的人來說可能看起來很奇怪,特別是如果ActionListener行為應該是類的私有而不是在它之外使用。
所以它主要是你認為在你的代碼中看起來更好的選擇; 關於字段/方法訪問唯一真正的區別(例如,一個單獨的非內部類將無法訪問您的類的私有方法和字段,匿名內部類無法訪問該類的非最終變量封閉方法等)。
我不喜歡或使用“implements ActionListener”。
我喜歡並使用匿名內部類,如:
btnPurplescreen.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Color baseColor = Color.BLUE;
panelImage.setBackground(baseColor);
panelReference.setBackground(baseColor);
panelReference2.setBackground(baseColor);
baseType = BaseType.PURPLE;
}
});
你有更多的絆腳石。
在某種意義上,只有一種方法可以創建一個監聽器:必須有一個實現ActionListener
的類的對象,這意味着該類具有actionPerformed
方法。
有三種方法可以做到這一點:
您可以通過將其標記為實現ActionListener
並添加actionPerformed
方法來修改已用於其他類的類。 這可以節省您創建一個新類 - 在大多數情況下可以節省可忽略的價值 - 但是火星可以提供非常好的代碼。 少數情況下,現有的情況
您可以創建一個新的命名類。 如果您認為該名稱對某人有意義,這將非常有用。 如果你真的使用像“MyListener”這樣的名字,那就是一個沒有人的線索,沒有人關心這個名字。
最后,通常,您可以創建一個未命名的類。 如果您只想添加一段代碼作為監聽器。
無論你選擇什么,這是非常不可能有時間還是完成系統的內存性能檢測任何影響。 選擇應該由對可讀性和可維護性的關注決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.