有没有办法在Java中传递方法引用?

时间:2012-02-18 03:14:42

标签: java function methods reference parameters

这很难用,但我需要能够将特定方法链接到对象。更具体地说,我正在制作面向图形的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的一百个规格看起来很乱。

感谢您的帮助。

4 个答案:

答案 0 :(得分:6)

按钮应该使用ActionListener实现。在这种特殊情况下坚持使用Swing。

您自己的类可以效仿并从命令模式界面开始:

public interface Command {
    public void execute(Map<String, Object> parameters); 
}

或许更好的想法是坚持使用JDK提供的API并尝试Callable

答案 1 :(得分:1)

Java中没有方法引用。相反,您可以使用伪闭包(也称为匿名内部类)。唯一的问题当然是,如果需要,你不能重复使用这些功能。

答案 2 :(得分:0)

通常,您只需使用ActionListener匿名内部类来执行此操作,并在actionPerformed方法中添加所需的任何方法调用。

类似的东西:

b.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent a) {
        b.someMethod();
    }               
});

答案 3 :(得分:0)

Java 8 开始,将会有易于使用的方法引用和lambda表达式。

将操作分配给按钮实际上就是一个很好的例子。

 bttnExit.setOnAction((actionEvent) -> { Platform.exit(); });

或使用方法参考:

 bttnExit.setOnAction(MyClass::handleExitButton);