0

I'm busy making a Java game, and for enemies, I store them in an ArrayList. But when I try to use the get(int) method, it keeps giving me The type of get(int) is erroneous where E is a type-variable: Why is this? Shouldn't it just return the element? I've searched a while and haven't been able to find a solution to this.

Here's the part of my code:

for(int i=0;i<holes.size();i++){
    hole temp = holes.get(i);
    if((p1.playerRec.x/48)==(temp.holeRec.x/48) && (p1.playerRec.y/48)==(temp.holeRec.y/48)){
        gameOver=true;
    }
}

public void findHoles(){
    for(int i=0;i<map1.height;i++){
        for(int j=0;j<map1.width;j++){
            if(map1.tileMap[i][j]==5){
                addHole(new hole(i,j));
            }
        }   
    }
}

public void addHole(hole h){
    holes.add(h);
}
4

2 回答 2

4

嘿,通用用户 2305801,

尽管我必须强调使用语法约定,正如 Stephen C 所坚持的那样,但当您声明类名小写时,我确信您的代码不会导致这个特定问题。

我刚刚向自己的膝盖开了一箭,据说犯了和你一样的错误。尽管您在此期间肯定解决了问题,但我将在此处提及记录的可能解决方案:

也许您在包含孔类声明的外部类文件中的文件顶部缺少包语句。如果类文件已经包含一个包声明,则使其与您引用该类的文件具有相同的命名空间。

所以在引用文件中写:

package whackamole;

public static void main(String[] args)
{
    ...
    for(int i=0;i<holes.size();i++){
        Hole temp = holes.get(i);
    }
    ...
}

在类文件中:

package whackamole;

public class Hole
{
    ...
}

我知道代码示例有点多余,但我只是想尝试一下。

于 2014-03-28T16:17:45.173 回答
2

根据您涓涓细流喂给我们的信息,这没有多大意义......

但是代码中有一个线索。

您似乎忽略了 Java 标识符命名规则,并将您的类之一命名为“hole”而不是“Hole”。这是不好的风格。但后果可能比时尚警察的一记耳光还要糟糕。

问题在于,Java 的名称解析规则设计为在您遵守样式规则时工作得最好。如果您声明一个变量/字段“hole”并且您还有一个名为“hole”的类,则 JLS 表示变量/字段名称优先......在某些情况下。这可能会导致一些非常混乱的编译错误消息,如果您实际上是指“洞”来表示一个类。

所以 ...

通过将类“hole”重命名为“Hole”来修复样式冲突。这也可能使奇怪的编译错误消失。但无论如何你都应该这样做!

于 2013-04-27T02:11:57.437 回答