java - 具有不同签名但主体相同的函数
问题描述
考虑一个类
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ShortcutButton extends JButton {
public ShortcutButton(String text, KeyStroke[] keyStrokes, ActionListener actionListener) {
super(text);
addActionListener(actionListener);
addShortcut(keyStrokes);
}
public ShortcutButton(String text, KeyStroke keyStrokes, ActionListener actionListener) {
super(text);
addActionListener(actionListener);
addShortcut(keyStrokes);
}
public ShortcutButton(String text, String[] keyStrokes, ActionListener actionListener) {
super(text);
addActionListener(actionListener);
addShortcut(keyStrokes);
}
public ShortcutButton(String text, String keyStrokes, ActionListener actionListener) {
super(text);
addActionListener(actionListener);
addShortcut(keyStrokes);
}
public void addShortcuts(KeyStroke[] keyStrokes) {
for (KeyStroke keyStroke : keyStrokes) {
addShortcut(keyStroke);
}
}
public void addShortcuts(String[] keyStrokes) {
for (String keyStroke : keyStrokes) {
addShortcut(keyStroke);
}
}
public void addShortcut(String keyStroke) {
addShortcut(KeyStroke.getKeyStroke(keyStroke));
}
public void addShortcut(KeyStroke keyStroke) {
//some code here
}
}
如您所见,ShortcutButton()
构造函数和addShortcuts()
函数具有不同的签名,但具有相同的主体。有没有一种很好的方法可以缩短这段代码,以免在四个不同的函数中复制粘贴相同的代码?
解决方案
如果对参数重新排序并使用可变参数,则可以将它们简化为两个构造函数:
public ShortcutButton(String text, ActionListener actionListener, KeyStroke... keyStrokes) {
super(text);
addActionListener(actionListener);
addShortcuts(keyStrokes);
}
public ShortcutButton(String text, ActionListener actionListener, String... keyStrokes) {
super(text);
addActionListener(actionListener);
addShortcuts(keyStrokes);
}
如果您有将 a 转换为 a 的方法,String[]
则KeyStroke[]
可以进一步缩短代码:
public ShortcutButton(String text, ActionListener actionListener, KeyStroke... keyStrokes) {
super(text);
addActionListener(actionListener);
addShortcuts(keyStrokes);
}
public ShortcutButton(String text, ActionListener actionListener, String... keyStrokes) {
this(text,actionListener,getShortCuts(keyStrokes));
}
推荐阅读
- bash - 为什么 `($(hostname -I))` 会扩展到 IP 列表的第一个单词?
- php - 如何在 PhpWord 中使标题居中并遮蔽包含它的完整行
- angular - 在 UI 中进行预填日期输入
- javascript - 两个单声道音频流,一个在右扬声器上并行播放另一个在左扬声器上
- netlify - 为什么 YARN_FLAGS 被忽略?
- swift - 使用 Firebase 的 Swift 完成处理程序
- reactjs - 带有下一个路由器的默认布局(页眉、页脚)
- python - 在 TestCases 中的 setUp 或 setUpClass 中修补装饰器不起作用
- html - R从网络中提取表格,没有
- python-3.x - 丑陋的二维列表。为什么?