我正在使用 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/