0

我正在尝试重构大型代码库的一部分,并且处于代码类似的位置-

abstract class Animal {
    String type;
}

class Dog extends Animal {
    public Dog() { type = "DOG"; }
}

 class Cat extends Animal {
    public Cat() { type = "CAT"; }
 }

现在整个代码库中有很多以 List< Animal > 为输入的方法,所以我不想打扰这些接口。在许多这些方法中,通常会迭代列表,并且根据列表中每个对象的 Animal 对象的“类型”属性完成一些处理。为此,我必须从 Animal 到 Cat 或 Dog 进行丑陋的沮丧。例子:

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 {....}
        }
    }

}

我想知道是否还有其他方法可以做到这一点。有什么想法吗?

4

1 回答 1

0

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

除此之外,我不能从给定的信息中提出太多建议。

于 2013-06-06T00:29:03.490 回答