Java 作为数据结构一部分的接口
我正在尝试编写一些代码(这里是java新手用户),但遇到了一个错误。我有一种预感,它与我对AdvancedMatch的类定义有关,AdvancedMatch是锦标赛中的比赛。它需要有两个馈线匹配,可以是AdvancedMatch或InitMatch,其中InitMatch没有馈线,而AdvancedMatch有馈线。为了实现这一点,我使用了一个接口ITournance,它让我可以选择将ITournance放在AdvancedMatch的数据结构中Java 作为数据结构一部分的接口,java,interface,Java,Interface,我正在尝试编写一些代码(这里是java新手用户),但遇到了一个错误。我有一种预感,它与我对AdvancedMatch的类定义有关,AdvancedMatch是锦标赛中的比赛。它需要有两个馈线匹配,可以是AdvancedMatch或InitMatch,其中InitMatch没有馈线,而AdvancedMatch有馈线。为了实现这一点,我使用了一个接口ITournance,它让我可以选择将ITournance放在AdvancedMatch的数据结构中 public class AdvancedMat
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被声明为ITournanceITournance 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来结束(它们在开始比赛时没有辅助匹配)。啊,没关系,我想我会试试你答案的第二部分。希望这能奏效。非常感谢。