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

B类具有以下方法:setPlayer(SimplePlayer播放器)和setPlayer(InterleavedPlayer播放器)

A类具有一个Player字段,该字段被设计为SimplePlayer或InterleavedPlayer。类A希望在这些播放器上调用B.setPlayer(),而不必考虑对象是Player的哪个子类。

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

但是在A调用B.setPlayer()时,出现一个未找到符号错误,该错误指向B.setPlayer(Player)。

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

最佳答案

在A中有重载的方法:

private Player;

public void setPlayer(SimplePlager player) {
    this.player = player;
    b.setPlayer(player);
}

// similar for InterleavedPlayer


或者,如果调用来自构造函数内部,则也可以重载。

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

10-13 00:27