1

私はクラス Item を持っています。各アイテムには、それに関連付けられた一意の識別子があります。一意の識別子に基づいて Item インスタンス全体を取得することは可能ですか? つまり、一意の識別子をキーとして使用したいのです。

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

IDに基づいて、その名前と日付を取得したいと思います。そうする方法はありますか?

まず、ID を指定して、以前に保存したインスタンスに基づいて、コンストラクターを使用してクラス インスタンスを保存します。インスタンス全体を取得したい

4

3 に答える 3

3

You could make a HashMap like this.

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

And just do something like,

itemMap.put(itemInstance.id, itemInstance);

Or maybe even an ArrayList<Item> and create a getter method that loops through the ArrayList for that specific id.

In any case, you're going to have create some type of collection.

于 2012-10-27T05:58:53.477 に答える
1

I think you are confusing a class instance with a container that searches for a class instances.

Strictly speaking, there is nothing about the class's id which will help you find that class instance. However, in a collection of class instances, you could simply iterate the objects, checking each one's id. All of this is completely dependent on your collection's type.

于 2012-10-27T05:59:26.050 に答える
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);
       }
   }
}

ただし...これは大規模なストレージリークです。これまでに作成されたすべてItemのインスタンスは、静的を介して常に到達可能であるallため、ガベージ コレクションを実行できません。多くの場合、これはこのアプローチを実行不可能にするのに十分です。

于 2012-10-27T06:49:46.233 に答える