【问题标题】:How to retrieve an object by its name in java如何在java中通过对象的名称检索对象
【发布时间】:2013-07-13 16:16:29
【问题描述】:

我有一个 Java 游戏,大约有 7,000 个游戏块。每个部分都扩展了一个名为Card 的基础对象。每件作品都有不同的属性(它可以做什么)。


我需要能够通过调用它们的名称来动态加载这些对象。所以说用户想使用一张名为“Card no.1”的卡,他会输入“Card no.1”,然后它应该创建一个新的“Card_no1”对象。我该怎么做呢?
我考虑过将每个对象放在一个 Hashtable 中,并使用它的名称作为键。有更好的想法吗?
编辑: 我已经对卡片对象进行了编程。我只是不确定如何加载它们。我需要能够通过使用它们的名称来检索它们,而不是创建一个新对象并将其命名。这是因为我必须对每个单独的效果进行编程。

【问题讨论】:

  • 对象没有名,除非你给它们(例如通过有一个name字段)。如果您正在考虑您的变量 名称,它们会非常不同。变量仅在编译时指定 - 您不能在执行时创建新字段。
  • @jonskeet 谢谢,我明白这一点,这就是为什么我不知道如何去做这件事。基本上它应该是一个非常小的“yu-gi-oh”之类的游戏。但我不习惯用 OOP 来思考。

标签: java hashtable


【解决方案1】:

如果每张卡片都有一个类文件,并且您想在调用时创建一个新对象,那么您想要的不需要涉及哈希表。改为这样做(以编程方式实例化一个类):

import java.lang.reflect.*;
import java.lang.reflect.Constructor.*;

String cardName = <whatever>
Card newCard = Class.forName(cardName).getDeclaredConstructor().newInstance();

如果游戏碎片由对象而不是类文件表示(即您没有 7,000 个不同的类文件),那么每张卡片都应该有一个 name 字段。在这种情况下,您可能会做的事情是将它们全部粘贴在一个哈希图中,使用它们的名称作为键。然后,当您想制作特定类型的新卡片时,检索其对象并调用clone()

【讨论】:

  • 很高兴我能帮上忙。只是好奇——你实际上有 7,000 个类文件吗?
  • 7000 只是一个数字。我有大约 150 个游戏棋子。是的,我确实有一个类文件,因为它们的效果都是不同的,并且必须进行硬编码。
【解决方案2】:

我认为你想要实现的是这个

作为用户类型 card no 1,创建一个具有特定属性集的新对象,其值为“Card no1”。因此,一旦用户为 card 输入了一些名称,就创建一个新对象

 String userInput= req.getParamter("cardSeq");
 Card card1 = new Card();
 card1.setName(userInput)

虽然答案很简单,但这就是我认为你正在努力实现的目标。

【讨论】:

    【解决方案3】:

    您已经知道从 7000 张卡片的 HashMap 池中获取卡片的最佳方法。 出于与同步相关的原因,请使用 HashMap 而不是 HashTable。

    请记住正确覆盖 hashCode 和 equals 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 2021-09-24
      • 2011-02-23
      相关资源
      最近更新 更多