抽象动作 lambda

2 java lambda swing intellij-idea

IntelliJ 建议我改变

new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            // my code here
        }
}
Run Code Online (Sandbox Code Playgroud)

(AbstractAction) (e) -> {
    // my code here
}
Run Code Online (Sandbox Code Playgroud)

当我将代码更改为上面建议的代码时,我收到消息“lambda 转换的目标类型必须是接口”。

ttn*_*ttn 6

您应该实现抽象操作类,以便您可以在功能上使用它。

public class FunctionalAction extends AbstractAction {

    ActionListener myaction;

    public FunctionalAction(ActionListener customaction) {
        this.myaction = customaction;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        myaction.actionPerformed(e);
    }

    public ActionListener getMyaction() {
        return myaction;
    }

    public void setMyaction(ActionListener myaction) {
        this.myaction = myaction;
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式使用此类:

getTexfield().getActionMap().put(actionName, new FunctionalAction(ae -> {
        }));
Run Code Online (Sandbox Code Playgroud)