接口/类/实现/扩展混淆

时间:2014-03-07 13:41:19

标签: java eclipse

我正在尝试使用Java编写Connect Four游戏,基于一些给定的接口。

我的问题是我有一个编程任务,包括我必须使用的接口,但实现它们时会有一些错误。以下接口/类是预定的:

public interface Move {
}

public interface Game<M extends Move> {
...

    pulbic M someMethod(){

    }

...

}

public interface AIPlayer<M extends Move> {
...
}

public class AlphaBetaAlgorithm<G extends Game<M>, M extends Move> implements AIPlayer<M>{
...
}

以下的类是我自己的类,我通过实现上层接口来编写:

public class ConnectFourMove implements Move{
...
}

public class ConnectFourGame<ConnectFourMove> implements Game{
...
}

现在的问题是,在“ConnectFourGame”类的方法中,我需要使用“AlphaBetaAlgortihm”类,现在使用“ConnectFourGame”和“ConnectFourMove”。所以我们记得:

public class AlphaBetaAlgorithm<G extends Game<M>, M extends Move> implements AIPlayer<M>{
...
}

现在我想做的是:

public class ConnectFourGame<ConnectFourMove> implements Game{

...
    public ConnectFourMove someMethod(){

        AlphaBetaAlgorithm alphabeta = new AlphaBetaAlgorithm<ConnectFourGame, ConnectFourMove>();
        ...
   }

...

}

我在课堂宣言中有一个错误告诉我:

“类型参数ConnectFourMove正在隐藏ConnectFourMove类型”

方法声明中的一个,告诉我:

“返回类型与Game.someMehtod()”

不兼容

和“alphabeta”声明中的两个说:

“绑定不匹配:ConnectFourGame类型不是AlphaBetaAlgorithm类型的有界参数&gt;的有效替代” 和 “绑定不匹配:ConnectFourMove类型不是AlphaBetaAlgorithm类型的有界参数的有效替代”

在将接口实现到类中时,我做错了什么导致它们不能将彼此识别为通常引用的接口的实现?

注意:我已导入了到达我实现的接口所需的所有软件包。

1 个答案:

答案 0 :(得分:2)

哇,这是一个复杂而复杂的布局!我认为这个问题和你定义ConnectFourGame的方式一样简单。将ConnectFourMove泛型移动到Game界面:

public class ConnectFourGame implements Game<ConnectFourMove>

这是因为ConnectForGame实现了Game,你实现的游戏没有指定类型。