如何将类的实例传递给作为参数的数组?

时间:2014-04-26 19:00:45

标签: java arrays parameters instance

我有这个方法,其中一个参数是一个数组:

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);

但是你可能知道现在不起作用。任何解决方案?

1 个答案:

答案 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。