因此,第一次使用泛型,我的任务是制作一个由正方形组成的地牢(游戏世界),这些正方形(实际上是立方体)具有很多类型,但这并不重要。
因此,我有一个ComposedDungeons
类,该类表示由其他地牢构建而成的地牢,它没有自己的方块,但包含SubDungeon
类的其他子类。这样,我得到了一个像树的结构,其根为ComposedDungeon
,而叶子也不能拥有自己的叶子,除非它们也是ComposedDungeons
。
第一(超级班)
public abstract class Subdungeon<E extends Square> {
....
问题方法:
protected abstract Dimension getDimensionOf(E square);
第二个:
public class ComposedDungeon<E extends Square> extends Subdungeon<E> {
/**
* Return the dimension of the given Square.
*
* @param square
* The square of which the dimension is required.
* @return The dimension which contains this square.
*/
protected Dimension getDimensionOf(E square){
for(Subdungeon<? extends E> dungeon : getAllSubdungeons()){
Dimension dimension = dungeon.getDimensionOf(square);
if(dimension != null)
return dimension.add(getDimensionOfDungeon(dungeon));
}
return null;
}
错误
-方法Subdungeon 不适用于参数(E)
我没有解决此问题的想法,想法是使该方法递归,以便它将一直进行搜索,直到找到不是
ComposedDungeon
的叶子为止。我希望有人得到它并能提供帮助。
最佳答案
我相信问题出在您的ComposedDungeon#getDimensionOf(E)方法的for循环中。
for(Subdungeon<? extends E> dungeon : getAllSubdungeons()){
...应该...
for(Subdungeon<E> dungeon : getAllSubdungeons()){
E已经被定义为
Square
类型的子类,因此实际上不必添加,这是不正确的。