gpt4 book ai didi

java - 避免带有重载修改器的 instanceof

转载 作者:行者123 更新时间:2023-12-04 20:39:40 28 4
gpt4 key购买 nike

我有两个继承自 Player 的类:SimplePlayer 和 InterleavedPlayer。

B 类有这些方法:setPlayer(SimplePlayer player) 和 setPlayer(InterleavedPlayer player)

A 类有一个 Player 字段,它被设计为 SimplePlayer 或 InterleavedPlayer。 A 类想要对这些播放器调用 B.setPlayer(),而不关心对象是 Player 的哪个子类。

我为子类重载了 B.setPlayer() 以避免在广义 B.setPlayer(Player player) 方法中使用 instanceof。

但是在 A 调用 B.setPlayer() 时,我得到一个引用 B.setPlayer(Player) 的符号未找到错误。

我应该使用什么设计方法来解决这个问题? (A 实际上创建了玩家,所以它在理论上“知道”它传递给 B 的是什么。但是,由于 A 不加区别地对待它的玩家的方式,似乎只让一个玩家来做事似乎是有意义的,而不是必须区分 SimplePlayer 和 InterleavedPlayer)。

最佳答案

使用 instanceof 不一定是邪恶的。与所有设计决策一样,它涉及权衡。我想这里要问的问题是,有问题的代码是与 A 还是 B 耦合得更多?

例如,如果创建了一个新的 Player 子类会怎样?是否必须修改 B 以添加新的 setPlayer 方法?如果是这样,那么在 B 中使用一个通过 instanceof 进行分派(dispatch)的通用方法是有意义的,因为无论如何您都必须修改 B。

关于java - 避免带有重载修改器的 instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18264769/

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