私は、このコードをより洗練された効率的なコーディング方法に変換しようとしていました。
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
。そこで、次のようなスーパータイプを使用してこれらの属性を設定するメソッドを作成しようとしました。
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 で定義されていないため、正しい呼び出しを行うには検証を作成する必要があります。スーパークラスでこのメソッドを定義することはできません。これをもっとうまく書く方法はありますか?
ありがとうございました