У меня есть hashmap в моем классе под названием DataStorage:
HashMap<String, Integer> people = new HashMap<String, Integer>();
people.put("bob", 2);
people.put("susan", 5);
Как я могу получить доступ к данным в этой HashMap в другом классе?
У меня есть hashmap в моем классе под названием DataStorage:
HashMap<String, Integer> people = new HashMap<String, Integer>();
people.put("bob", 2);
people.put("susan", 5);
Как я могу получить доступ к данным в этой HashMap в другом классе?
Создайте свой 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...
}
}
Как сторонник скажите, не спрашивайте Я хотел бы показать, как это можно сделать без каких-либо геттеров.
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
. Все, что у них есть, - это интерфейс. Это означает, что вы можете делать все, что захотите, в любом классе, пока вы поддерживаете этот интерфейс.
BTW, классы являются только статичными, потому что я должен был ленив, чтобы переместить их в свои собственные файлы.:)
Вы можете получить к нему доступ:
DataStorage storage = new DataStorage();
HashMap<String, Integer> people = storage.people;
Вы можете сделать свой HashMap общедоступным или создать для него геттер:
public HashMap<String, Integer> getPeople() {
return people;
}
то вы можете получить к нему доступ, используя экземпляр класса DataStorage, например:
DataStorage dataStorage = new DataStorage();
dataStorage.getPeople()
или, если вы также сделаете статику getter и HashMap:
DataStorage.getPeople()
EDIT:
Обратите внимание, что если ваши переменные экземпляра специально не заданы модификаторами доступа, они по умолчанию используют package
access, что означает, что к ним можно получить доступ из других классов, определенных в одном пакете. Более подробную информацию о модификаторах доступа можно найти в 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
Это 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;
}
}
получить доступ к данным хэш-карты из другого класса
String value = ListDataStorage.getHmapCashType().get("A").toString()
Если вам нужно использовать один и тот же экземпляр HashMap в вашем приложении, вам нужно создать синглтон. Использование синглтона гарантирует, что что-либо, пытающееся получить к нему доступ, всегда будет ссылаться на один и тот же экземпляр 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;