gpt4 book ai didi

Java - 从通用方法返回正确的类型

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:19 25 4
gpt4 key购买 nike

我有以下类结构:

public class Team {
...
}

public class Event {

}

public abstract class Fixture<T extends Team> implements Event {
...
}

public abstract class Forecast<Event> {

}

public class MyPrediction<T extends Fixture<? extends Team>> extends Forecast<Fixture<? extends Team>>{

}

我正在尝试为各种体育赛事建模(即“Fixture”是针对两个参与者之间的特定游戏,而另一种类型的“Event”可能有很多参与者),以及对特定“事件”的结果。我有一个通用方法:

public <T> MyPrediction<Fixture<? extends Team>> getMyPrediction(Fixture<? extends Team> fixture) {

我希望能够返回一个 MyPrediction 实例,它具有 fixture 参数的泛型类型,但我似乎做不到。例如,如果我执行如下操作,则会出现编译错误:

SoccerFixture<EnglishSoccerTeams> soccerMatch = new ScoccerFixture<EnglishSoccerTeams>();
MyPrediction<SoccerFixture<EnglishSoccerTeams>> = getMyPrediction(soccerMatch);

我愿意更改我的类(class)结构以包含此功能。我该怎么做?

最佳答案

getMyPrediction的签名改为

public <T extends Fixture<? extends Team>> MyPrediction<T> getMyPrediction(T fixture)

这告诉编译器参数和结果中的夹具类型相同,允许类型检查通过。

这是一个完整的例子,为了编译它做了一些其他的小改动。它引入了类 Predictor 来保存 getMyPrediction 方法和一个 doit 方法来展示示例使用:

public interface Team {
}

public interface Event {
}

public abstract class Fixture<T extends Team> implements Event {
}

public abstract class Forecast<T> {
}

public class MyPrediction<T extends Fixture<? extends Team>> extends
Forecast<Fixture<? extends Team>> {
}

public class SoccerFixture<T extends SoccerTeam> extends Fixture<T> {
}

public class SoccerTeam implements Team {
}

public class EnglishSoccerTeam extends SoccerTeam {
}

public class Predictor {

public <T extends Fixture<? extends Team>> MyPrediction<T> getMyPrediction(T fixture) {
return new MyPrediction<T>();
}

public void doit() {
SoccerFixture<EnglishSoccerTeam> soccerMatch = new SoccerFixture<EnglishSoccerTeam>();
MyPrediction<SoccerFixture<EnglishSoccerTeam>> myPrediction = getMyPrediction(soccerMatch);
}
}

如其他地方所述,您可能需要引入一个或多个工厂对象才能在 MyPrediction 实现中执行有意义的工作。

关于Java - 从通用方法返回正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700932/

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