Ai vem a dúvida. Eu tenho uma outra classe que precisa acessar essa mesma HashMap que o gerente ta usando, e não consigo fazer isso. Não posso somente instanciar um novo objeto de RepositorioProdutos pois ele criaria outra HashMap vazia e eu preciso dos dados da HashMap instanciada por gerente.
Ai vem a dúvida. Eu tenho uma outra classe que precisa acessar essa mesma HashMap que o gerente ta usando, e não consigo fazer isso. Não posso somente instanciar um novo objeto de RepositorioProdutos pois ele criaria outra HashMap vazia e eu preciso dos dados da HashMap instanciada por gerente.
Alguém me ajuda?
Deixe eu ver se entendi. Você deseja acessar a HashMap de classes distintas de onde ela foi declarada, correto? Você ainda deseja ter apenas uma instância dessa HashMap, correto?
Você pode fazer o seguinte. Coloque a variável HashMap e a sua instanciação como static. Assim, independentemente de quantos objetos estejam na memória, haverá sempre somente 1 HashMap.
static Map<String, Produto> produtos = new HashMap<>();
Para acessá-la, utilize o comando em qualquer classe no mesmo pacote:
RepositorioProdutos.produtos.método(...)
clunsde
Olá Sergio,
de acordo com as boas práticas de OO, você poderia resolver este problema da seguinte maneira, ao invés de instanciar o RepositorioProdutos na classe Gerente, o que torna essa classe altamente acoplada, você faz a classe Gerente receber o RepositorioProdutos
@ECO2004 tornar o Map estático não resolve o problema e ainda cria outro.
Não resolve o problema porque há uma falha de orientação a objetos já indicada pelo @clunsde e @felipe_gdr.
Cria outro problema porque pode existir outra instância de Gerente que terá seu próprio Map. Ao tornar o Map estático, além dele ser compartilhado entre a Classe Gerente e a “outra classe”, será compartilhada ENTRE as instâncias de Gerente.