Acessar um objeto já instanciado pelo nome usando uma string [RESOLVIDO]
5 respostas
B
branet77
Olá galera
Como eu faria para acessar um objeto já instanciado pelo nome?
exemplo
JTextAreajtarea1=newJTextArea();// aqui eu instancio o primeiroJTextAreajtarea2=newJTextArea();// aqui eu instancio o segundo...for(inti=1;i<3;i++){System.out.println(("jtarea"+i).getText());// Aqui que está o problema}
Entenderam?
Isso é só um exemplo, mas queria saber se é possível fazer isso em java
já pesquisei por reflexão, mas não achei a solução para esse problema lá
Tem como sim, mas na verdade você vai colocar a referência do objeto em uma mapa e usa como chave o "nome da variável".
Exemplo:
// um mapa, com chave do tipo String e conteúdo do tipo JTextAreaMap<String,JTextArea>m=newHashMap<String,JTextArea>();// criando os componentes (troquei os nomes para vc não confundir com o código abaixo)...JTextAreajt1=newJTextArea();JTextAreajt2=newJTextArea();// adicionando no mapa// o primeiro parâmetro é a chave que vai armazenar a referência ao componente// o segundo parâmetro é a referência ao objeto em si.m.put("jtarea1",jt1);m.put("jtarea2",jt2);...for(inti=1;i<3;i++){// pegando as referências pelo nomeSystem.out.println(m.get("jtarea"+i)).getText());}
domzinhuu
Bom voce tambem pode Chamar pelo nome exato do objeto (caso queira somente 2 mesmo, se quiser varios o melhor é um array), ou se quiser uma saida personalizada pode estar sobrescrevendo o metodo toString();
eu acho…
Como eu faria para acessar um objeto já instanciado pelo nome?
exemplo
JTextAreajtarea1=newJTextArea();// aqui eu instancio o primeiroJTextAreajtarea2=newJTextArea();// aqui eu instancio o segundo...for(inti=1;i<3;i++){System.out.println(("jtarea"+i).getText());// Aqui que está o problema}
Entenderam?
Isso é só um exemplo, mas queria saber se é possível fazer isso em java
já pesquisei por reflexão, mas não achei a solução para esse problema lá
A ideia que vc quer realizar é possível com reflection, mas existem outras formas mais simples, como usar arrays ou coleções , ou mapas.
Com reflection é possivel mas o código fica muito longo para ser útil. Reflection não deve ser usada para coisas como esta.
A sua pergunta denota que ainda está num mundo muito orientado a string e precisa sair dele conhecendo outras estruturas e entender que, em java, o nome das variáveis não é uma string (por isso que o seu código não funciona) e não é o nome do objeto.
B
branet77
Ae galera!
Agradeço a todos, principalmente ao ArOn e DavidBuzatto
Tanto a solução do Array quanto a do Map vão funcionar para mim e era exatamente o que eu tava precisando.
Fiquei muito impressionado com a velocidade com que o Tópico foi respondido.
Quanto à resposta do Sergiotaborda , fico feliz por ter mencionado a reflexão, porém não tenho essa visão que mencionou quanto à orientação a String, mesmo porque o objetivo do tópico em relação ao que foi exposto não era usar objeto a partir de String, e sim expor para os usuários do GUJ
com disposição para ajudar um problema afim de obter possíveis soluções.