Доступ к HashMap из другого класса

У меня есть hashmap в моем классе под названием DataStorage:

HashMap<String, Integer> people = new HashMap<String, Integer>();

people.put("bob", 2);
people.put("susan", 5);

Как я могу получить доступ к данным в этой HashMap в другом классе?

Ответ 1

Создайте свой 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...
      }  
}

Ответ 2

Как сторонник скажите, не спрашивайте Я хотел бы показать, как это можно сделать без каких-либо геттеров.

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, классы являются только статичными, потому что я должен был ленив, чтобы переместить их в свои собственные файлы.:)

Ответ 3

Вы можете получить к нему доступ:

DataStorage storage = new DataStorage();
HashMap<String, Integer> people = storage.people;

Ответ 4

Вы можете сделать свой 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

Ответ 5

Это 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()

Ответ 6

Если вам нужно использовать один и тот же экземпляр 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;