【问题标题】:AbstractAction lambda抽象动作 lambda
【发布时间】:2017-05-13 17:02:02
【问题描述】:

IntelliJ 建议我改变

new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            // my code here
        }
}

(AbstractAction) (e) -> {
    // my code here
}

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

【问题讨论】:

  • 如果没有一些周围的代码,就不可能知道这里发生了什么。
  • 这不是一个真正的问题:)
  • 可能是IDE最好建议(ActionListener) (e) -> { ... }

标签: java swing intellij-idea lambda


【解决方案1】:

你应该实现抽象动作类,这样你就可以在功能上使用它。

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;
    }

}

你可以像下面这样使用这个类:

getTexfield().getActionMap().put(actionName, new FunctionalAction(ae -> {
        }));

【讨论】:

    猜你喜欢
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2016-03-12
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多