我应该使用继承吗?

时间:2018-07-23 15:39:22

标签: java oop

我有一个包含以下内容的类:

  • 标题(类)
  • 详细信息列表(类)

一个细节可以具有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());
    }
    ...
  }

1 个答案:

答案 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);