[英]Is there a way to pass a method reference in Java?
這很難表達,但是我需要能夠將特定方法鏈接到對象。 更具體地說,我正在制作一個面向圖形的GUI,並且希望能夠將任意方法分配為元素(例如按鈕)的默認“操作”功能。
也就是說,我創建了這些具有接口的“圖形”對象,這些對象基本上具有繪制自己的能力。 我希望他們處理自己的動作,因此我可以例如執行以下操作:
GraphicObject b1 = new Button();
GraphicObject b2 = new Button();
b1.assignDefaultAction(---some method reference here--);
b2.assignDefaultAction(---a different method reference here--);
然后,如果我做類似的事情:
b1.action();
b2.action();
每個元素將獨立調用其自己的引用方法。 我相信這可以在C ++中完成,但是我還沒有在Java中看到過。 甚至有可能,還是有某種解決方法? 我要避免的事情是必須為我需要做的每件事做一個特定的抽象,或者亂扔我包含的JPanel的一百個看起來很亂的規范。
謝謝你的幫助。
按鈕應使用ActionListener
實現。 在這種情況下,請堅持使用Swing。
您自己的類可以緊隨其后,並從Command模式界面開始:
public interface Command {
public void execute(Map<String, Object> parameters);
}
也許更好的主意是堅持使用JDK提供的API並嘗試Callable 。
Java中沒有方法引用。 相反,您可以使用偽閉包(也稱為匿名內部類)。 唯一的問題當然是,如果需要,您不能重用這些功能。
從Java 8開始,將提供易於使用的方法引用和lambda表達式。
將操作分配給按鈕實際上是一個很好的例子。
bttnExit.setOnAction((actionEvent) -> { Platform.exit(); });
或者,使用方法引用:
bttnExit.setOnAction(MyClass::handleExitButton);
通常,您只需要使用ActionListener匿名內部類來執行此操作,然后在actionPerformed方法中添加所需的任何方法調用即可。
就像是:
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent a) {
b.someMethod();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.