Выяснение конкретной реализации из суперкласса
Я пытаюсь провести рефакторинг частей большой кодовой базы и нахожусь в точке, где код похож
abstract class Animal {
String type;
}
class Dog extends Animal {
public Dog() { type = "DOG"; }
}
class Cat extends Animal {
public Cat() { type = "CAT"; }
}
Сейчас по всей базе кодов существует множество методов, которые принимают List
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 {....}
}
}
}
Мне было интересно, есть ли другой способ сделать это. Какие-нибудь мысли?
1 ответ
Если вы можете улучшить свои Animal
класс, чтобы лучше охватить ожидаемое поведение объектов этого типа, это должно быть первым делом.
Кроме этого, я мало что могу предложить по данной информации.