微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使类似块的代码动态化

如何解决如何使类似块的代码动态化

我正在使用 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 以及任何类型的集合 selectedGapFillingCountWINTSselectedGapFillingCountFR,并且该方法可能应该返回网格而不是直接将其设置为类变量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。