java - 建议如何重写以下 Java 代码片段

标签 java

我试图将这段代码转换为更优雅或更有效的编码方式。

final ContentSlotForPageModel rel = modelService.create(ContentSlotForPageModel.class);
rel.setUid("rel_1");
rel.setPosition("no");
rel.setCatalogVersion(catalogVersionModel);
rel.setPage(firstContentPage);
rel.setContentSlot(slot);
modelService.save(rel);

final ContentSlotForTemplateModel relTemplate = modelService.create(ContentSlotForTemplateModel.class);
relTemplate.setUid("relTemplate_1");
relTemplate.setPosition("no");
relTemplate.setCatalogVersion(catalogVersionModel);
relTemplate.setPageTemplate(template);
relTemplate.setContentSlot(slot);
modelService.save(rel);

其中 ContentSlotForPageModelContentSlotForTemplateModelCMSRelationModel 的子类型。因此,我尝试创建一个方法,通过使用其父类(super class)型来设置这些属性,如下所示:

private void setRelationModel(final CMSRelationModel rel, final ContentSlotModel slot, final String id)
{
    rel.setUid(id);
    rel.setCatalogVersion(catalogVersionModel);

    if (rel instanceof ContentSlotForPageModel)
    {
        ((ContentSlotForPageModel) rel).setPage(firstContentPage);
        ((ContentSlotForPageModel) rel).setContentSlot(slot);
        ((ContentSlotForPageModel) rel).setPosition("no");
    }
    else if (rel instanceof ContentSlotForTemplateModel)
    {
        ((ContentSlotForTemplateModel) rel).setPageTemplate(template);
        ((ContentSlotForTemplateModel) rel).setContentSlot(slot);
        ((ContentSlotForTemplateModel) rel).setPosition("no");
    }

    modelService.save(rel);

}

但是,CMSRelationModel 上没有定义许多方法,因此我需要创建一个验证来进行正确的调用。我无法在其父类(super class)上定义此方法。有更好的写法吗?

谢谢

最佳答案

执行以下操作。
instanceof、强类型、重复代码最小化。

private void setRelationModel(ContentSlotForPageModel rel, ContentSlotModel slot, String id) {
    rel.setPage(firstContentPage);
    rel.setContentSlot(slot);
    rel.setPosition("no");
    setCMSRelationModel(rel);
}

private void setRelationModel(ContentSlotForTemplateModel rel, ContentSlotModel slot, String id) {
    rel.setPageTemplate(template);
    rel.setContentSlot(slot);
    rel.setPosition("no");
    setCMSRelationModel(rel);
}

private void setCMSRelationModel(CMSRelationModel rel, String id) {
    rel.setUid(id);
    rel.setCatalogVersion(catalogVersionModel);
    modelService.save(rel);
}

我还从参数中删除了 final 以减少“代码噪音”。

关于java - 建议如何重写以下 Java 代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242755/

相关文章:

java - 期待 ANTLR 中的 NEWLINE

java - 替换字符串中的重复子串

java - 卡夫卡流无法在 Spark 作业中工作

java - 在软件中实现超时

java - buildr - 从 WSDL 位置编译 jar

java - JCombobox 下拉可见性问题?

java - BpmnError 在 activiti 中不起作用

java - Cipher 的 doFinal() 不写入字节

java - API 21 之前的 View.setBackgroundTintList?

javascript - 使用编辑从jsp获取servlet中的条目并通过Javascript保存