私はこのコードをよりエレガントで効率的なコードに変換しようとしていました。次のJavaコードスニペットを書き直す方法
ContentSlotForPageModel
と
ContentSlotForTemplateModel
が
CMSRelationModel
のサブタイプです
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);
。だから私はこのようにそのスーパータイプを使用してこれらの属性を設定するメソッドを作成しようとしました:
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に定義されていないので、私は右の呼び出しを行うために検証を作成する必要があります。スーパークラスでこのメソッドを定義することはできません。これを書くにはより良い方法がありますか?
ありがとうございました
私は十分に明確ではないかもしれません。このメソッドを呼び出す方法は問題ではありません。それは、setRelationModelメソッドをより一般的なものにする方法の問題です。私は繰り返す必要はありません:setPage、setContentSlot。このようにして検証をスキップします – Bartzilla