我的程序中有多个类,我正在尝试找到一种在其他类中使用某些方法的方法。通常我会这样做:
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上,因为我创建了它的新版本...有人可以为我纠正这个代码所以我可以看到你们在谈论什么?
答案 0 :(得分: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
并将其引用的副本作为参数传递给您的类的构造函数。您的类保存此引用并使用它来访问同一对象。
在共享对象时,重要的是要知道您正在做什么,以便不会丢失/覆盖更新。
答案 1 :(得分:1)
这也是另一种可行的方法。扩展hashmap并使该类成为单例。
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());
}
}