什么是"类型不匹配"以及如何解决?

时间:2014-12-05 21:54:14

标签: java syntax-error bukkit type-mismatch

如何解决此错误?

  

类型不匹配:无法从元素类型对象转换为块

我在这一行看到了:

for (Block b : blocksToSkip){

这是完整的代码。

@EventHandler(priority=EventPriority.NORMAL, ignoreCancelled=true)
public void onEntityExplode(EntityExplodeEvent ev){
    ArrayList blocksToSkip = new ArrayList();
    Location rootLoc = ev.getLocation();
    if (!SkyMagic.IsInIslandWorld(rootLoc)) return;
    for (Block b : ev.blockList()){
        Location loc = b.getLocation();
        IslandData data = SkyMagic.GetIslandAt(loc);
        if ((data != null) && (data.owner != null)){
            blocksToSkip.add(b);
        }
    }
    for (Block b : blocksToSkip){
        ev.blockList().remove(b);
    }
}

1 个答案:

答案 0 :(得分:1)

这是原始类型

ArrayList blocksToSkip

Java期望所有内容,而不仅仅是Block类型。 因此,您需要类型转换

ArrayList blocksToSkip = new ArrayList();

// Rest of your code

for (Object b : blocksToSkip){
    ev.blockList().remove( (Block)b );
}

请注意,不建议使用原始类型。 您应该参数化

ArrayList<Block> blocksToSkip = new ArrayList<Block>();