问题描述
我正在使用 vaadin 创建我的网页,我需要为不同类型创建相同类型的块,例如需要显示具有汽车详细信息的块,所以只有汽车名称会不同,但块设计将与相同的标签相同但标签不同。我想编写通用代码,以便我可以将其扩展为任何汽车名称,而无需手动添加。
附上我正在使用的代码片段,我正在为不同类型重复我的代码。想动态实现。
private Grid<PresentableGenerateInputHeaders> winTSHeaderColumnsGrid;
private Grid<PresentableGenerateInputHeaders> fRHeaderColumnsGrid;
private ListDataProvider<PresentableGenerateInputHeaders> listDataProvider;
private List<PresentableGenerateInputHeaders> presentableGenerateInputHeaders = new ArrayList<>();
private void initWinTsGrid() {
listDataProvider = new ListDataProvider<>(presentableGenerateInputHeaders);
winTSHeaderColumnsGrid = new Grid<PresentableGenerateInputHeaders>(PresentableGenerateInputHeaders.class);
winTSHeaderColumnsGrid.setDataProvider(listDataProvider);
winTSHeaderColumnsGrid.setCaption(i18n.get("view.ruleDetails.general.csvHeaderColumns"));
winTSHeaderColumnsGrid.setStyleName("a-units");
winTSHeaderColumnsGrid.setWidth("450px");
winTSHeaderColumnsGrid.setItems(addGridValues(DataSource.WIN_TS,winTSHeaderColumnsGrid));
winTSHeaderColumnsGrid.getEditor().setEnabled(true);
winTSHeaderColumnsGrid.setColumnorder("header","count");
winTSHeaderColumnsGrid.sort("header");
winTSHeaderColumnsGrid.getEditor().addSaveListener((EditorSaveEvent<PresentableGenerateInputHeaders> event) -> {
event.getGrid().select(event.getBean());
selectedGapFillingCountWINTS.add(event.getBean());
});
}
private void initFRGrid() {
listDataProvider = new ListDataProvider<>(presentableGenerateInputHeaders);
fRHeaderColumnsGrid = new Grid<PresentableGenerateInputHeaders>(PresentableGenerateInputHeaders.class);
fRHeaderColumnsGrid.setDataProvider(listDataProvider);
fRHeaderColumnsGrid.setCaption(i18n.get("view.ruleDetails.general.csvHeaderColumns"));
fRHeaderColumnsGrid.setStyleName("a-units");
fRHeaderColumnsGrid.setWidth("450px");
fRHeaderColumnsGrid.setItems(addGridValues(DataSource.FR,fRHeaderColumnsGrid));
fRHeaderColumnsGrid.getEditor().setEnabled(true);
fRHeaderColumnsGrid.setColumnorder("header","count");
fRHeaderColumnsGrid.sort("header");
fRHeaderColumnsGrid.getEditor().addSaveListener((EditorSaveEvent<PresentableGenerateInputHeaders> event) -> {
event.getGrid().select(event.getBean());
selectedGapFillingCountFR.add(event.getBean());
});
}
解决方法
您可以通过识别您不想保持静态的所有部分并将这些部分移动到由方法参数填充的部分来更改方法以使其更通用。 IE。而不是
private void myMethod() {
grid.setCaption("myCaption");
}
你会写
private void myMethod(String caption) {
grid.setCaption(caption);
}
然后调用它
myMethod("myCaption");
如果您需要在整个类之外才能确定真正的值是什么,例如,您可以将方法设为公开或在类构造函数中传递必要的值。
public MyClass(String gridCaption) {
myMethod(gridCaption);
}
如果您需要动态设置很多值,您可以考虑使用包含所有必要值的对象。
public void myMethod(MyPojo pojo) {
grid.setCaption(pojo.getGridCaption());
}
在您的示例中,您想要传递的通用值似乎是 DataSource dataSource
以及任何类型的集合 selectedGapFillingCountWINTS
和 selectedGapFillingCountFR
,并且该方法可能应该返回网格而不是直接将其设置为类变量。