我试图将这段代码转换为更优雅或更有效的编码方式。
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);
其中 ContentSlotForPageModel
和 ContentSlotForTemplateModel
是 CMSRelationModel
的子类型。因此,我尝试创建一个方法,通过使用其父类(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/