我有一个包含以下内容的类:
一个细节可以具有3种类型,所有不同的属性。它们有2个共同的属性,因此我使用了继承。
问题在于代码变得越来越难维护,尤其是当我必须在列表中获取详细信息时。我必须做类似的事情:
if(detail instanceof DetailType1){
something
}
else something
还有其他选择吗?有什么建议吗?
先感激
编辑:
List<String> values = new ArrayList<String>();
for (Detail detail : fFile.getDetails())
{
if (detail instanceof DetailType1)
{
values.add(fFile.getHeader().getEntity() + "-" + detail1.getType());
values.add(((DetailType1) detail).getServiceReference());
values.add(fFile.getHeader().getProcessedDate());
}
else if (detail instanceof DetailType3)
{
values.add(((DetailType3) detail).getClientCode());
values.add(((DetailType3) detail).getMaxAmount().toString());
values.add(((DetailType3) detail).getReference());
}
...
}
答案 0 :(得分:2)
通常来说,您对instanceof是一种难闻的气味是正确的-修复它的方法是通过在接口上调用一个方法,该接口由您使用“ instanceof”的所有对象实现。
在您的情况下,这是我的看法:
DetailType1和3应该使用类似的方法实现相同的接口
addToValues(List<String> values){}
它们每个都以不同的方式实现此接口,例如,DetailType1应该看起来像这样(您可能还必须传递fFile):
addToValues(List<String> values){
values.add(fFile.getHeader().getEntity() + "-" + getType());
values.add(getServiceReference());
values.add(fFile.getHeader().getProcessedDate());
}
代码中的原始循环变为:
for(Detail detail : fFile.getDetails())
detail.addToValues(values);