gpt4 book ai didi

java - 是否有可能 - 模板化此方法?

转载 作者:行者123 更新时间:2023-12-01 14:23:37 28 4
gpt4 key购买 nike

我是 Java 新手,有一些问题想请教更高级的开发人员。

我有基于 Swing 的 GUI 应用程序,其中有几个 AbstractActions。一大组 AbstractActions 基于 JPanel 创建新选项卡。例如:

// opens "Documents" tab
documentsAction = new AbstractAction(DOCUMENTS) {
@Override
public void actionPerformed(ActionEvent e) {
try {
int index = getTabIndex(DOCUMENTS);
if (index >= 0) {
// Tab exists, just open it.
tabbedPane.setSelectedIndex(index);
} else {
// No tab. Create it and open
newCatalogTab(new DocumentService(), DOCUMENTS);
}
} catch (ServiceException ex) {
printError(ex.getMessage());
}
}
};
documentsItem.setAction(documentsAction);

其中 getTabIndex 是:

  private int getTabIndex(String tabName) {
int result = -1;
for (int i = 0; i < tabbedPane.getTabCount(); i++) {
if (tabName.equals(tabbedPane.getTitleAt(i))) {
result = i;
break;
}
}
return result;
}

newCatalogTab是:

  private void newCatalogTab(ICatalog service, String Name) throws ServiceException {
CatalogPanel panel = new CatalogPanel(service);
tabbedPane.add(Name, panel);
tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
checkTabs(); // changes activity of buttons like "edit" and "delete"
}

因此,许多 AbstractAction 都做类似的工作:

  1. 创建扩展 AbstractPanel 的类实例;
  2. 将数据访问接口(interface)(示例中的DocumentService)传递给实例;
  3. 使用实例创建一个新选项卡。

如果数据访问接口(interface)将使用不同的 POJO,我可以以某种方式对此进行模板化吗?我可以创建通用接口(interface)并使用它吗?你能告诉我正确的思考方向吗?

感谢您浪费您的时间。

最佳答案

Java中没有模板,所以无论如何都会有一些代码重复。但是,您可以使用 factories 来删除一些样板代码。 。例如:

interface CatalogFactory {
public ICatalog makeCatalog();
}

class DocumentServiceFactory implements CatalogFactory {
@Override
public ICatalog makeCatalog() {
return new DocumentService();
}
}

class TabAction extends AbstractAction {
private final String name;
private final CatalogFactory factory;

//Appropriate constructor...

@Override
public void actionPerformed(ActionEvent e) {
//...
newCatalogTab(factory.makeCatalog(), name);
//...
}
}

然后你就可以了

documentsItem.setAction(new TabAction(DOCUMENTS, new DocumentServiceFactory()));

无需为每个选项卡创建单独的匿名 AbstractAction。

对于面板以及可能适合此模式的其他对象也是如此。

关于java - 是否有可能 - 模板化此方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338594/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com