【问题标题】:How do I allow for infinite object instantiation? [duplicate]如何允许无限对象实例化? [复制]
【发布时间】:2014-12-05 20:40:33
【问题描述】:

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

程序将有一个 Building 类型的对象。

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

Building building1 = new Building();

...)

但是,这种方法不适用于我的程序。我的程序需要能够即时实例化新的 Building 对象。想象一下,用户可以选择单击一个按钮,将一个新的建筑物放置到世界中。他们可以点击 0 次将新建筑放置到世界中,也可以点击 5,000 次,从而将 5,000 座建筑放置到世界中。

我显然不想像这样实例化 5,000 个对象:

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

对如何编写代码有什么建议吗?提前致谢!

【问题讨论】:

  • 使用像ArrayList这样的集合
  • 你可以从这里开始:collections tutorial
  • 投票有点苛刻,如果你不熟悉这个概念,这可能是一个很难向谷歌表达的要求。
  • 谢谢你,@AlexK。您的参考对我帮助很大。
  • @Alex 任何关于任何编程语言的介绍性文本或教程都将教授数组和/或列表。

标签: java object constructor instantiation objectinstantiation


【解决方案1】:

您需要了解两件事才能完成您似乎要求做的事情。

第一个是(在这种情况下)建筑对象的集合。您可以在 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");

但我认为这更难阅读。

仅供参考,“无限”数量的对象只能在具有无限内存的机器上支持;我认为这意味着“在运行时确定”。

【讨论】:

  • 感谢您的跟进和完整回答。您的 ArrayList 建议非常适合我需要做的事情。我可以通过键入以下内容成功调用检索值的方法:'building.get(0).getValue()' 但是,我确实有一个问题。我将使用什么语法对 ArrayList 中的对象调用 setValue 方法?我有很多麻烦。
  • 没关系 - 想通了。感谢您的帮助!
猜你喜欢
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
相关资源
最近更新 更多