Java 作为数据结构一部分的接口

Java 作为数据结构一部分的接口,java,interface,Java,Interface,我正在尝试编写一些代码(这里是java新手用户),但遇到了一个错误。我有一种预感,它与我对AdvancedMatch的类定义有关,AdvancedMatch是锦标赛中的比赛。它需要有两个馈线匹配,可以是AdvancedMatch或InitMatch,其中InitMatch没有馈线,而AdvancedMatch有馈线。为了实现这一点,我使用了一个接口ITournance,它让我可以选择将ITournance放在AdvancedMatch的数据结构中 public class AdvancedMat

我正在尝试编写一些代码(这里是java新手用户),但遇到了一个错误。我有一种预感,它与我对AdvancedMatch的类定义有关,AdvancedMatch是锦标赛中的比赛。它需要有两个馈线匹配,可以是AdvancedMatch或InitMatch,其中InitMatch没有馈线,而AdvancedMatch有馈线。为了实现这一点,我使用了一个接口ITournance,它让我可以选择将ITournance放在AdvancedMatch的数据结构中

public class AdvancedMatch implements ITournament {
  MatchData data;
  ITournament feeder1;
  ITournament feeder2;

  AdvancedMatch (MatchData data, ITournament feeder1, ITournament feeder2) {
    this.data = data;
    this.feeder1 = feeder1;
    this.feeder2 = feeder2;
  }
}


public class InitMatch implements ITournament {
  MatchData data;

  InitMatch (MatchData data) {
    this.data = data;
  }
}

interface ITournament {
  public Boolean allScoresValid();

  public Boolean highCapacityVenue(int ticketsSold);

  public Boolean winnerAlwaysAdvanced();

  public Boolean tWinnerContestant1() ;

}
在代码的后面部分,我尝试在一个方法中调用feeder1.data,我不断得到数据无法解析或不是字段的错误。这让我很困惑,因为数据显然是AdvancedMatch和InitMatch的一部分

public Boolean winnerAlwaysAdvanced() {
    if (this.feeder1.tWinnerContestant1()) {
      this.data.dCompareContestants1(this.feeder1.data);
    }
    else 
      return this.data.dCompareContestants2(this.feeder1.data);
    }
}

任何帮助都将不胜感激。

对于要实现接口的类,它必须实现接口的所有方法


您的两个类都没有实现
ITournance
接口的所有方法。

您的feeder1被声明为ITournance
ITournance feeder1-未声明为具有
数据
属性的
InitMatch

当使用接口声明变量时,它只能访问接口中声明的内容,而不管底层类实例如何

由于InitMatch和AdvancedMatch都有数据元素,因此可以将其包含在接口定义中。然而,最佳实践需要“getter”,而不是直接访问

interface ITournament {
  public Boolean allScoresValid();
  public Boolean highCapacityVenue(int ticketsSold);
  public Boolean winnerAlwaysAdvanced();
  public Boolean tWinnerContestant1();
  public MatchData getMatchData();
}

在请求帮助时,通常最好包括您遇到的错误的堆栈跟踪。并不是说它总是需要的,但当声明您有错误时,人们通常希望堆栈跟踪包含在问题描述中。请显示
winneralwaysadvanced()
的上下文。它是在哪个类中实现的?这不是完整的代码。出于篇幅原因,我没有发布整个代码,只是因为我认为这将是一个没有正确的类定义(接口作为字段)的简单例子。如果这不是问题所在,我在这里完全迷路了。@Charles-这是一个很好的做法,然后包括该方法,但将主体替换为
/*为了简洁而省略*/
或其他内容,这样读者就知道它是故意遗漏的。那么有没有办法让feeder1和feeder2成为AdvancedMatch或InitMatch?我需要能够建立一个多层次的树,每个分支都有InitMatches来结束(它们在开始比赛时没有辅助匹配)。啊,没关系,我想我会试试你答案的第二部分。希望这能奏效。非常感谢。