我有这个方法,其中一个参数是一个数组:
public ItemToolPickaxe(int itemNum, String itemName, String iconName, Block[] usedOn, int durability, int quality) {
super(itemNum, itemName, iconName, usedOn, durability, quality);
}
阻止可以使用哪个块。在我的代码中,我有:
public static Item ironPickaxe = new ItemToolPickaxe(0, "Iron Pickaxe", "item_ironPickaxe", new Block[] { Block.stone }, 500, 75);
我希望在Block.stone和任何BlockOre
实例的块上使用pickaxe。 BlockOre
扩展了Block,如我的块类中所示:
public static Block oreIron = new BlockOre(/*Non-Related*/);
所以我在想:
public static Item ironPickaxe = new ItemToolPickaxe(0, "Iron Pickaxe", "item_ironShovel", new Block[] { Block.stone, BlockOre.class }, 500, 75);
但是你可能知道现在不起作用。任何解决方案?
答案 0 :(得分:0)
创建一个空的ArrayList。遍历您的Blocks数组,并为每个项检查它是否是BlockOre的实例。如果是,请将其添加到ArrayList。完成后,将ArayList转换为数组,并将其传递给Pickaxe构造函数。
编辑:
以下是所要求的代码:
package test;
import java.util.ArrayList;
public class Test {
static class Block {};
static class OreBlock extends Block {};
public static void main(String[] args) {
Block[] arrayOfBlocks = new Block[] {new Block(), new OreBlock(), new Block(), new OreBlock()};
ArrayList<OreBlock> arrayListOfOreBlocks = new ArrayList<OreBlock>();
for(Block block : arrayOfBlocks){
if(block != null && block instanceof OreBlock){
arrayListOfOreBlocks.add((OreBlock)block);
}
}
OreBlock[] arrayOfOreBlocks = arrayListOfOreBlocks.toArray(new OreBlock[arrayListOfOreBlocks.size()]);
System.out.println(arrayOfOreBlocks.length);
}
}
按照预期运行时,它会打印2。