gpt4 book ai didi

oop - 为什么不在OOP设计中使用instanceof运算符?

转载 作者:行者123 更新时间:2023-12-04 13:11:33 25 4
gpt4 key购买 nike

反复说过,除了equals()方法外,不应该使用instanceof运算符,否则这是一个糟糕的OOP设计。
有人写道这是一个繁重的操作,但似乎,至少在Java上,它处理得很好(甚至比Object.toString()比较更有效)。
有人可以解释一下,还是可以引导我阅读一些解释为什么设计不好的文章?
考虑一下:

Class Man{
doThingsWithAnimals(List<Animal> animals){
for(Animal animal : animals){
if(animal instanceOf Fish){
eatIt(animal);
}
else if(animal instanceof Dog){
playWithIt(animal);
}
}
}
...
}
如何处理动物的决定,取决于人。人的欲望有时也会改变,决定吃狗,和鱼嬉戏,而动物却没有改变。
如果您认为此处的instanceof运算符不是正确的OOP设计,请告诉您在没有instanceof的情况下如何进行操作,为什么?

最佳答案

instanceof只是破坏了Open/Close principle.和/或Liskov substitution principle

如果由于instanceof的使用我们不够抽象,则每次新的子类进入时,收集应用程序逻辑的主代码都可能会更新。
这显然不是我们想要的,因为它可能会破坏现有代码并降低其可重用性。

因此,应该优先使用多态性而不是条件式的基本用法。

关于oop - 为什么不在OOP设计中使用instanceof运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20589590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com