Array com Objetos

Olá pessoal,

Sou novo no fórum e novo na linguagem Java. Programo php a uns 5 anos e achei um pouco familiar a linguagem java já que trabalho diretamente com poo. Pra quem conhece o framework zend, há uma classe Registry que simplesmente guarda a referencia a um objeto em um array pra ser chamado em outras classes sem precisar instanciar novamente ou usar algum recurso static. Estive tentando fazer algo parecido com esta classe em java mais acabou em Fail. Tentei List, ArrayList, tudo que é tipo de Listas que encontrei nos tutoriais da caelum mais não encontrei uma solução.

Pra simplificar, quero saber se é possível fazer isto em Java:

List<Object> lista = new ArrayList<Object>(); lista.add(new Usuarios()); lista.add(new Autenticacao());
Depois em alguma outra classe eu utilizasse algo como: (EXEMPLO)

lista.get(Usuarios).setNome("Nome"); // eu pudesse chamar os métodos da classe a partir da lista

ou isto:

lista.addExemplo("auth", new Autenticacao());

e chamasse os métodos assim:

lista.getExemplo("auth").validaUsuario("blablabla");

em Java há alguma classe que faça algo assim??

Obrigado

Bom dia.

Sim e sim.

Para o seu primeiro caso é perfeitamente possível, pois, quando utiliza o método .get(index) do list você simplesmente acessa o objeto contida naquela posição. Supondo que seja o objeto Autenticação, estes dois itens são válidos:

[code]//pega o objeto contida na primeira posição
Autenticacao autenticacao = list.get(0);

Ou se preferes acessar o objeto diretamente
list.get(0).setNome(“Josivaldo”);[/code]

O segundo caso, eu recomendaria que você usasse HashMap, se não o conhece, dê uma estudada, mas segue um exemplo:

[code]HashMap<String, Autenticacao> hash = new HashMap<String, Autenticacao>();

hash.put(“Exemplo”, autenticacao);[/code]

Quando quiser fazer acesso ao seu objeto, basta dar um get(key), no caso, a key, é a palavra chave que mapeou ok?
Espero ter ajudado.

Abraços.

Olá nel,

HashMap é exatamente o que eu estava precisando. Esta foi a única classe que eu não revisei nos tutoriais da caelum hehe

Muito Obrigado :smiley:

edit.:

HashMap<String, Autenticacao> hash = new HashMap<String, Autenticacao>(); hash.put("Exemplo", autenticacao);
Se não estiver enganado, desta forma não poderei adicionar varios tipos de objetos neste mesmo mapa, estou certo?
Haveria possibilidade setar o segundo parâmetro como Object ou então generalizar ele?

Só lembrando que se vc usar um list vc tera que fazer um cast pra atribuir seu objeto guardado no list para alguma variavel de referencia e tomar cuidado pra nao receber um ClassCastException

Olá joselmocs.

Então, poder você pode, pode utilizar com algo assim:

HashMap<?, ?> map…

Ou:

HashMap<String, Object> hash = new HashMap<String, Object>();

Só fique atento a algo, terá que ter total controle em cima das “keys” do Hashmap, pois quando der o get você vai retornar um Object e para que não ocorra um ClassCastException() você deve ter certeza do tipo de cast que está efetuando. Lembrando que as keys e os values do HashMap pode ser Objects, List entre outros, ai vai da sua necessidade e como pretende utiliza-los.

Espero ter ajudado. Ah, quando fala em generalizar, isto me lembra Generics, conheço muito pouco, portanto, dá uma pesquisa aqui mesmo no GUJ ou pela net caso isto lhe interesse.
Abração!

Edit: Acho que isto lhe ajudaria.

HashMap<String, HashMap<String, Object>> hash = new HashMap<String, HashMap<String,Object>>();

Um HashMap de HashMap. No primeiro Hash você coloca como Key o nome do Objeto que deseja e no segundo uma chave que deseja e o tipo de Objeto.
Algo assim:

HashMap<String, Autentication> hashAutentication = new HashMap<String, Autentication>(); hashAutentication.put("Admin", autentication);

E em seguida:

hash.put("Autentication", hashAutentication);

Claro que pode melhorar isto, mas no primeiro hash você utiliza da chave para identificar qual o tipo de objeto que terá no segundo hash (o que está contido no primeiro) e desta forma evita um ClassCastException.

Abraços.

Olás,

Obrigado pela ajuda everton e Nel… Acho que vou começar estudar o HashMap um pouco antes de brincar com ele hehehe
obrigado msm pela ajuda nel…

Abs