初始化2D自定义对象数组

时间:2016-01-22 19:51:31

标签: java arrays

我有关于初始化自定义对象的2D数组的问题。

我有2个对象:CellEntityMapEntity,其中包含:

private final ICellEntity[][] cellMap;

我已在cellmap的构造函数中初始化MapEntity

cellMap = new CellEntity[width][length];

但每个CellEntity都是null

我想知道是否有一个解决方案来调用(强制)CellEntity类中的方法,以便初始化CellEntity中的每个cellMap

3 个答案:

答案 0 :(得分:3)

  

我不想修改cellMap,这就是为什么cellMap是最终的

因为你想让它成为最终的。您可以通过构造函数设置它的值:

class MapEntity
{
    private final ICellEntity[][] cellMap;

    public MapEntity(ICellEntity[][] cellMap){
        this.cellMap = cellMap;
    }
}

您可以先创建一个初始化的cellMap数组,然后通过构造函数传递它,以便在MapEntity中设置cellMap的值。

//Initialize your cellMap else where first
ICellEntity[][] cellMap = new CellEntity[width][length];
for(int x=0; x<width; x++)
    for(int y=0; y<length; y++)
        cellMap[x][y] = new CellEntity();

//Pass in the initialized cellMap via the constructor
MapEntity mapEntity = new MapEntity(cellMap);
  

我想知道是否有一个解决方案来调用(强制)CellEntity类中的方法,以便在cellMap中初始化每个CellEntity?

好吧,如果你的cellMap被宣布为最终版,你无法通过方法(访问者)设置它,除了可能使用反射(我不认为你)非常喜欢

答案 1 :(得分:0)

git push <remote-name> <branch-name>

答案 2 :(得分:0)

  

我想知道是否有一个解决方案来调用(强制)CellEntity类中的方法,以便在cellMap中初始化每个CellEntity?

实际上可以,但必须首先创建数组。

第一个变化

首先在构造函数中创建数组。我们在创建后无法更改cellMap的引用,但我们仍然可以在其中分配值:

class TestRunner{
    public static void main(String[] args){
        MapEntity me = new MapEntity(5, 5);
        me.initCellMap();   //init cellMap separately
    }
}

class MapEntity
{
    private final CellEntity[][] cellMap;

    public MapEntity(int width, int length){
        cellMap = new CellEntity[width][length];   //has to be done in constructor
    }

    public void initCellMap(){
        for(int x=0; x<cellMap.length; x++)
            for(int y=0; y<cellMap[0].length; y++)
                cellMap[x][y] = new CellEntity();
    }
}

第二种变化

几乎与第一个类似,如果你不想在构造函数中创建它,你首先创建数组(个人而言,我不赞成这种方法):

class TestRunner{
    public static void main(String[] args){
        MapEntity me = new MapEntity();
        me.initCellMap();   //init cellMap separately
    }
}

class MapEntity
{
    final int LENGTH = 5;
    final int WIDTH = 5;
    final CellEntity[][] cellMap = new CellEntity[WIDTH][LENGTH];

    public MapEntity(){     
    }

    public void initCellMap(){
        for(int x=0; x<cellMap.length; x++)
            for(int y=0; y<cellMap[0].length; y++)
                cellMap[x][y] = new CellEntity();
    }
}