如何在java中按名称检索对象

时间:2013-07-13 16:16:30

标签: java hashtable

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

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

3 个答案:

答案 0 :(得分:0)

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

作为用户类型卡号1,创建一个新对象,其特定属性设置为“卡号1”。因此,一旦用户为卡片输入一些名称,就创建一个新对象

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

虽然回答非常简单,但我认为你正在努力实现。

答案 1 :(得分:0)

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

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

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

如果游戏块由对象表示,而不是类文件(即,您没有7,000个不同的类文件),则每张卡应具有name字段。在这种情况下,您可能会使用其名称作为键将它们全部放在哈希映射中。然后,当您想要制作特定类型的新卡时,检索其对象并调用clone()

答案 2 :(得分:0)

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

并且要记得正确覆盖hashCode和equals方法。