我正在尝试重构大型代码库的一部分,并且处于代码类似的地方 -
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 {....}
}
}
}
我想知道是否有其他方法可以做到这一点。有什么想法吗?
答案 0 :(得分:0)
如果您可以改进Animal
类以更好地捕获此类对象的预期行为,那应该是第一件事。
除此之外,从给定的信息中我没有多少建议。