我有一个具有此定义的通用类:

public class AcoProblemSolver<C, E extends Environment, A extends AntColony<E, Ant<C, E>>> {
AntColony的运行方式如下:
public abstract class AntColony<E extends Environment, A extends Ant<?, E>> {
Ant像这样:
public abstract class Ant<C, E extends Environment> {

我希望以这种方式扩展AntColony:
public class FlowShopProblemSolver extends
    AcoProblemSolver<Integer, FlowShopEnvironment, FlowShopAntColony> {

但是Eclipse在FlowShopAntColony参数类上显示了一个错误:
Bound mismatch: The type FlowShopAntColony is not a valid substitute for the bounded parameter <A extends AntColony<E,Ant<C,E>>> of the type AcoProblemSolver<C,E,A>

这让我感到困惑,因为FlowShopAntColony是这样定义的:
public class FlowShopAntColony extends
    AntColony<FlowShopEnvironment, AntForFlowShop> {
AntForFlowShop像这样:
public class AntForFlowShop extends Ant<Integer, FlowShopEnvironment> {

为什么FlowShopAntColony不被接受为有效参数?

最佳答案

A extends AntColony<E, Ant<C, E>>
AcoProblemSolver的第三个参数具有限制extends AntColony<E, Ant<C, E>>AntColony的第二个参数必须是,确切地说是 Ant<C, E>,而您正在尝试传递Ant的子类。尝试:
A extends AntColony<E, ? extends Ant<C, E>>

您可能需要其他类似的? extends子句。

09-12 12:04