簡體   English   中英

有沒有辦法在Java中傳遞方法引用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM