我有关于初始化自定义对象的2D数组的问题。
我有2个对象:CellEntity
和MapEntity
,其中包含:
private final ICellEntity[][] cellMap;
我已在cellmap
的构造函数中初始化MapEntity
cellMap = new CellEntity[width][length];
但每个CellEntity
都是null
。
我想知道是否有一个解决方案来调用(强制)CellEntity
类中的方法,以便初始化CellEntity
中的每个cellMap
?
答案 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();
}
}