如何允许无限对象实例化?

时间:2014-10-10 15:58:32

标签: java object constructor instantiation objectinstantiation

我目前停留在Java程序上。我的程序,一个城市建设者游戏,需要能够根据用户的心血来源随时实例化对象,并且对象的数量需要是无限的。

该程序将具有Building类型对象。

(我知道如何实例化新对象;就像这样......

Building building1 = new Building();

...)

但是,这种方法对我的程序是不可接受的。我的程序需要能够动态实例化新的Building对象。想象一下,用户可以选择点击将新建筑物放入世界的按钮。他们可以点击将新建筑物置于世界零次,或者他们可以点击5,000次,从而将5,000座建筑物投入世界。

我显然不希望实例化5,000个对象,如下所示:

Building building1 = new Building();
Building building2 = new Building();
...
Building building5000 = new Building();

有关如何编码的建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

你需要知道两件事要做你想要做的事。

第一个是(在这种情况下)建筑物对象的集合。您可以使用类似

的行在Java中创建一个
ArrayList<Building> buildings = new ArrayList<Building>();

在您的代码中,如果您执行以下两行,您将创建一个建筑并将其添加到列表中:

Building building = new Building();
buildings.add(building);

之后,即使building变量超出范围,建筑物仍将保留在列表中。您必须确保在您想要保留建筑物列表的时间段内没有超出范围的对象引用buildings对象。

要意识到的第二件事是,您不必拥有500个不同的实例化语句来创建500个建筑物。如果用户单击按钮,则可以执行代码(取决于您拥有的UI框架等);该代码可以创建一个建筑物并将其放入列表中。相同的代码可以执行另一个按钮点击;它会创建另一个建筑并将其放入列表中。如果有一个选项可以创建建筑物的数量,那么点击代码可以查看该选项并在循环中创建它应该构建的许多建筑物,并将它们放入列表中。

如果这不能满足您的需求,请澄清您的问题。

编辑:在数组中的对象上设置值

Building building = buildings.get(desiredIndex);
building.setDesiredValue("42");

您可以选择使用:

buildings.get(desiredIndex).setDesiredValue("42");

但我觉得这很难读。

仅供参考,&#34;无限&#34;只有具有无限内存的机器才能支持多个对象;我认为这意味着&#34;在运行时确定&#34;。