从超类中找出具体实现

  • 本文关键字:实现 超类 concreteclass
  • 更新时间 :
  • 英文 :


我正在尝试重构一个大型代码库的部分,并且我在代码类似的地方-

abstract class Animal {
    String type;
}
class Dog extends Animal {
    public Dog() { type = "DOG"; }
}
 class Cat extends Animal {
    public Cat() { type = "CAT"; }
 }

现在代码库中有很多方法都接受List<动物>作为输入,所以我不想打扰那些界面。在许多这些方法中,通常对列表进行迭代,并且根据列表中每个对象的Animal对象的"type"属性完成一些处理。为此,我必须从动物到猫或狗做丑陋的向下投射。例子:

class Processor {
    public void process(List<Animal> animals) {
        for(Animal animal: animals) {
            if(animal instanceof Dog) { // or if type.equals("DOG")
                Dog dog = (Dog) animal;
                dog.bark();
            } else if {....}
        }
    }
}

我想知道是否有其他的方法来做这件事。任何想法吗?

如果您可以改进您的Animal类以更好地捕获这类对象的预期行为,那么这应该是要做的第一件事。

除此之外,根据所给的信息,我没有什么建议。

相关内容

  • 没有找到相关文章

最新更新