因此,第一次使用泛型,我的任务是制作一个由正方形组成的地牢(游戏世界),这些正方形(实际上是立方体)具有很多类型,但这并不重要。

因此,我有一个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类型的子类,因此实际上不必添加,这是不正确的。

08-17 04:04