1

プログラムに複数のクラスがあり、他のクラスの 1 つでいくつかのメソッドを使用する方法を見つけようとしています。通常、私はただやります:

Class obj = new Class();

しかし、それはそれの新しいインスタンスを作成し、私は HashMaps を使用しているので、新しいマップを作成するため機能しません。すでに保存されているものと同じ HashMap を使用したい。これを行う最善の方法は何ですか?

編集:私が話しているコードの例を次に示します: クラス #1:

public class Foo{
HashMap<String,Integer> hashmap = new HashMap<String,Integer();
hashmap.put("something", 1);
}

クラス #2:

public class Foo2{
Foo f = new Foo();
f.get("something");
}

新しいバージョンを作成したため、 f.get には何も表示されません...誰かがこのコードを修正して、あなたたちが話していることを確認できますか?

4

2 に答える 2

3

オブジェクト参照を共有する必要があります

public class Main {
    public static class Foo{
        Map<String, Integer> map;
        public Foo(Map<String, Integer> map) {
            this.map = map; // don't create a new object, 
                            // use one that already exists that can be passed as an argument
        }

        public void put(String key, Integer value) {
            map.put(key, value);
        }

        public Integer get(String key) {
            return map.get(key);
        }
    }

    public static void main(String[] args) {
        Map<String, Integer> someMap = new HashMap<>();
        someMap.put("aKey", 42);

        Foo foo = new Foo(someMap); // the Foo object now references the map you just created
        System.out.println(foo.get("aKey")); // prints 42
    }
}

ここでは、 を作成し、Mapその参照のコピーを引数としてクラスのコンストラクターに渡します。クラスはこの参照を保存し、それを使用して同じオブジェクトにアクセスします。

オブジェクトを共有するときは、更新が失われたり上書きされたりしないように、自分が何をしているのかを知ることが重要です。

于 2013-09-22T15:26:10.420 に答える
1

これは、別の可能な方法でもあります。ハッシュマップを拡張し、クラスをシングルトンにします。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

class ExtHashMap<K,V> extends HashMap<Object,Object> {

    private static HashMap<?, ?> map;

    public static HashMap<?, ?> getInstance() {
        if (map == null) {
            map = new HashMap<Object,Object>();
        }
        return map;
    }

  private ExtHashMap() {
    super();
  }
}


public class SampleUtil {

    /**
     * @param args
     */

    public static void main(String args[]) throws Exception {
        HashMap map = ExtHashMap.getInstance();
        map.put("1", "v1");
        HashMap map1 = ExtHashMap.getInstance();
        map1.put("2", "v2");

        System.out.println(map1.values());
    }

}

于 2013-09-22T15:54:17.280 に答える