我的班级名为DataStorage:
HashMap<String, Integer> people = new HashMap<String, Integer>();
people.put("bob", 2);
people.put("susan", 5);
如何在不同的类中访问此HashMap中的数据?
答案 0 :(得分:8)
将HashMap创建为实例变量,并提供一种方法将其访问到您的类API中:
public class DataStorage {
private HashMap<String, Integer> people = new HashMap<String, Integer>();
public HashMap<String, Integer> getPeopleMap() {
return people;
}
}
public class AnotherClass {
DataStorage x = new DataStorage();
private void someMethod() {
HashMap<String, Integer> people = x.getPeopleMap();
//work with your map here...
}
}
答案 1 :(得分:3)
作为tell don't ask的倡导者,我想表明如何在没有吸气剂的情况下做到这一点。
public class TellDontAsk {
interface MapSetter {
public void setMap(Map map);
}
interface MapGiver {
public void giveMap(MapSetter acceptMap);
}
public static void main(String[] args) {
HashMap<String, Integer> people = new HashMap<String, Integer>();
people.put("bob", 2);
people.put("susan", 5);
DataStorage ds = new DataStorage();
ds.setMap(people);
AnotherClass ac = new AnotherClass();
ds.giveMap(ac);
ac.displayMap();
}
public static class DataStorage implements MapSetter, MapGiver {
private Map map;
@Override
public void setMap(Map map) {
this.map = map;
}
@Override
public void giveMap(MapSetter acceptMap) {
acceptMap.setMap(map);
}
}
public static class AnotherClass implements MapSetter {
private Map map;
public void displayMap() {
System.out.println(map);
}
@Override
public void setMap(Map map) {
this.map = map;
}
}
}
输出:
{bob=2, susan=5}
请注意DataStorage
如何知道AnotherClass
的存在? AnotherClass
也不了解DataStorage
。他们共享的只是一个界面。这意味着只要你继续支持该界面,你就可以自由地在任何一个班级做任何你喜欢的事。
答案 2 :(得分:1)
您可以访问它:
DataStorage storage = new DataStorage();
HashMap<String, Integer> people = storage.people;
答案 3 :(得分:1)
您可以将HashMap公开,也可以为其创建一个getter:
public HashMap<String, Integer> getPeople() {
return people;
}
然后您可以使用DataStorage类的实例访问它,如下所示:
DataStorage dataStorage = new DataStorage();
dataStorage.getPeople()
或者,如果你同时使getter和HashMap都是静态的:
DataStorage.getPeople()
编辑:
请注意,如果您的实例变量没有专门给出访问修饰符,则它们默认为package
访问权限,这意味着可以从同一包中定义的其他类访问它们。有关访问修饰符的更多详细信息,请参阅documentation
,这里有一个简短的摘要:
访问级别
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
答案 4 :(得分:0)
这是eazy
public class ListDataStorage {
public static LinkedHashMap getHmapCashType(){
LinkedHashMap<String, String> hMapCashType = new LinkedHashMap<String, String>();
hMapCashType.put("A", "Cash");
hMapCashType.put("B", "Credit");
return hMapCashType;
}
}
从另一个类访问hashmap数据
String value = ListDataStorage.getHmapCashType().get("A").toString()
答案 5 :(得分:0)
如果需要在整个应用程序中共享同一HashMap实例,则需要创建一个singleton。使用单例可以确保任何尝试访问它的实例都始终引用同一HashMap实例。例如HashMap<String,String>
:
单班:
public class MyData {
private static final MyData instance = new MyData ();
private MyData () {
HashMap myDataMap = new HashMap<String, String>();
... logic to populate the map
this.referenceData = myDataMap;
}
public HashMap<Integer, DeviceReference> referenceData;
public static DeviceData getInstance(){
return instance;
}
}
在其他课程中的使用:
HashMap<String, String> referenceData = MyData.getInstance().referenceData;