如何使用一个属性检索类实例

时间:2012-10-27 05:54:49

标签: java

我有一个类Item,每个项都有一个与之关联的唯一标识符。是否可以根据唯一标识符检索整个Item实例。也就是说,我想使用唯一标识符作为密钥。

 class Item{
     int id;
     String name;
     Date d;
 }

现在基于id,我想检索它的名字和日期。有没有办法这样做?

首先我存储类实例..使用构造函数,现在基于一些先前存储的实例,给定id。我想检索整个实例

3 个答案:

答案 0 :(得分:3)

你可以像这样制作一个HashMap。

HashMap<Integer, Item> itemMap = new HashMap<Integer, Item>();

并做一些类似的事情,

itemMap.put(itemInstance.id, itemInstance);

或者甚至可能是ArrayList<Item>并创建一个getter方法,循环遍历该特定ID的ArrayList

无论如何,你将创建一些类型的集合。

答案 1 :(得分:1)

我认为您将类实例与搜索类实例的容器混淆。

严格地说,类的id没有任何内容可以帮助你找到类实例。但是,在类实例的集合中,您可以简单地迭代对象,检查每个对象的id。所有这些都完全取决于您的收藏类型。

答案 2 :(得分:0)

  

首先我存储类实例..使用构造函数,现在基于一些先前存储的实例,给定id。我想检索整个实例

Java中没有对此的内在支持。

你可以自己实现这样的事情:

public class Item {
   private static HashMap<Integer, Item> all = new HashMap<Integer, Item>();
   private final int id;
   private String name;
   private Datedate;

   public Item(int id, String name, Date date) {
       this.id = id; this.name = name; this.date = date;
       synchronized (all) {
           all.put(id, this);
       }
   }

   // getters and setters

   public static getInstance(int id) {
       synchronized (all) {
           return all.get(id);
       }
   }
}

HOWEVER ...... 这是一次巨大的存储泄漏。创建的每个Item实例始终可以通过all静态访问,因此无法进行垃圾回收。在很多情况下,这足以使这种方法不可行。