我仍然是java的初学者,但我尝试编写好的代码(面向obj)。但是,我的方法有问题removeFromWorld
。我有几种方法,但无论我做什么,我似乎都打破了良好编程实践的“规则”。
我尝试了类型检查:
public class World{
private Set setGiraffes;
public void removeFromWorld(Animal animal){
if (isGiraffe(animal))
setGiraffes.remove((Giraffe) animal)
else if (isZebra(animal)){...}
else if ...
}
}
public abstract class Animal{..}
public class Giraffe extends Animal{..}
但听说这是个坏主意,因为在不改变现有方法的情况下添加新动物是不可能的。我考虑过转移removeFromWorld
到 Animal 并在每个子类中覆盖它,但由于它是 World 使用集合,这似乎也很糟糕
对于什么是“优雅”/好的解决方案,我感到很茫然。