如何确定对象属于特定类



这是我对接口Icontestant的类定义:

   interface IContestant {  
}
class TennisPlayer implements IContestant {
  String name;
  int ranking;
  TennisPlayer (String name, Integer ranking){
    this.name = name;
    this.ranking = ranking;
  }
}
class NotYetKnown  implements IContestant {
  NotYetKnown (){
  }
}

以下是我对类 MatchData 的定义:

    class MatchData {
  IContestant side1;
  IContestant side2;
  IContestant winner;
  IScore score;

  MatchData (IContestant side1, IContestant side2, IContestant winner, IScore score){
    this.side1 = side1;
    this.side2 = side2;
    this.winner = winner;
    this.score = score;
  }      
}

这是我对ITurnament的定义

interface ITournament {
  boolean winnerPlayed ();
}
class InitMatch implements ITournament {
  MatchData matchData;  
  InitMatch (MatchData matchData){
    this.matchData = matchData;
  }
 public boolean winnerPlayed (){
    if ((this.matchData.winner == this.matchData.side1)||(this.matchData.winner == this.matchData.side2)){
        return true;
      }
      else
        return false;
    }
    else 
      return true;
  }
}

现在我需要向winnerPlayed ()添加一个条件,以首先检查获胜者是否未知。如果它未知,那么我们可以在检查获胜者是 side1 还是 side2 之前返回 true。但是,我很难正确处理此条件。在这种情况下,我很困惑用什么来与this.matchData.winner进行比较.我知道this.matchData.side1TennisPlayerthis.matchData.side2是另一种TennisPlayer,所以我们比较this.matchData.winner是侧1还是面2的TennisPlayer。但是当谈到未知时,我开始感到困惑。如果你能在这里解释数据结构和对象,那就太好了。

谢谢。

此外,TennisPlayer 和 Unknown 的示例如下所示:

  TennisPlayer tennisPlayer1 = new TennisPlayer("Andre Agassi", 7);
  TennisPlayer tennisPlayer2 = new TennisPlayer ("Pat", 4);
  NotYetKnown unknown = new NotYetKnown();
  MatchData matchTennis2 = new MatchData (tennisPlayer1, tennisPlayer2, notYetKnown, tennisScore3 );
  InitMatch initTennis1 = new InitMatch (matchTennis1);

一个游戏有两个玩家,所以如果游戏已经玩过,获胜者必须是 side1 或 side2,如果游戏还没有玩过,则为 null。任何其他选项都意味着您的数据不一致。

编辑

如果由于某种原因 winner 不能为 null 并且始终设置为 NotKnownYet 对象,则可以使用 instanceof 来检查这一点

if winner instanceof NotYetKnown {...

也许您应该为未知玩家提供空白字符串作为名称。然后有一个方法来检索玩家姓名,如果检索的名称是空字符串,则知道玩家未知。我知道这可能不完全是您可能正在寻找的解决方案,但这可能是更简单的方法。

最新更新