fugro
@fugro
Начинающий кодер

Как сделать доступ к HashMap с других классов?

Привет!

Создаю консольное простое приложение, которые считывает данные в файла txt и записывает их в другой файл. После считывания помещаю данные в мапу.
Хочу сделать так чтобы пользователь мог дописать сам в мапу новый элемент, а потом записать его в файл.

Столкнулся с непонимаением того как сделать мою мапу статической и доступной во всех других классах, кроме Reader. То есть нужно сделать централизованный кеш.

public static ConcurrentHashMap<UUID, Person> cache = new ConcurrentHashMap<>();


Подскажите, как сделать доступной мапу в других классах или дайте ссылку на источник.

Заранее спасибо
  • Вопрос задан
  • 476 просмотров
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Делаете клас-сиглтон и в него кладете все что вам нужно пошарить (инициализируете все в приватном конструкторе).
public final class Singleton {

    private static Singleton instance;

    private  final ConcurrentHashMap<UUID, Person> cache; // не static!

    public Map<UUID, Person>  getCache() {
        return cache;
    }
    private Singleton() {
         this.cache = new ConcurrentHashMap<>()
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

И использование
Map<UUID, Person> cache = Singleton.getInstance().getCache();


Ну и на почитать - https://refactoring.guru/ru/design-patterns/single...

Вобще-то лучше избегать синглтонов, а использовать так называемую технику DI, например с использованием spring или guice (мой выбор). Но начать стоит именно с синглетонов.

Ну и конечно стандартный синглтон достаточно простой, можно еще сделать его ленивым и наворотить еще штук 20 строчек кода - тут головы взрывались на эту тему лет 10 назад.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
А не надо делать её доступной во всех других классах, Сделайте классу, который её содержит, методы добавления и получения из неё данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы