java - 将许多 "else if"替换为其他内容

标签 java if-statement

我正在使用 ActionListener 并有很多 else if 语句,以便知道按下了哪个按钮并根据按钮运行一些代码。

有没有办法让代码变得更好?我有近 10 个 else if 语句,我可以使用其他语句来代替吗?

代码示例:

class BtnListener implements ActionListener {   
            @Override
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == menu.getOpen()) {
                getFile();
            } else if (e.getSource() == btnPlay) {

            } else if (e.getSource() == btnQuit)) {
         }
}

谢谢。

最佳答案

您可以填写Map<Object, Consumer<ActionEvent>>在使用监听器之前,例如在构造函数中,其中 key 是 source值(value)是行动事件的消费者。在实际操作中,只需通过按键获取消费者并调用它即可。

class BtnListener implements ActionListener {
    Map<Object, Consumer<ActionEvent>> eventsMap = new HashMap<>();

    public BtnListener() {
        eventsMap.put(menu.getOpen(), actionEvent -> this.getFile());
        eventsMap.put(btnPlay, actionEvent -> { //do something
        });
        eventsMap.put(btnQuit, actionEvent -> { //do something else
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Optional.of(e)
                .map(ActionEvent::getSource)
                .map(eventsMap::get)
                .ifPresent(
                        actionEventConsumer -> actionEventConsumer.accept(e)
                );
    }
}

关于java - 将许多 "else if"替换为其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42020589/

相关文章:

Javascript、字符串、RegEx、if 和 else if、console.log 不同输出

javascript - 为什么将 var 与 "text"进行比较不起作用?

php - If 条件 : Why turning a boolean into an integer?

jquery - 如何使用 Jquery 更改表单文本但在用户填写时保留它?

java - 如何返回程序中的步骤?

java - 在运行时更新 jar 内的 xml 文件

java - 如何在 Java 中调用 XML <?xml-stylesheet ...?> 指令?

java - 是否可以一次更新 JTable 整行

java - 通过 Javascript 进行 Vertx 3 应用程序日志记录

java - 使用 Mockito 模拟 Jersey 客户端 ClientResponse