Acessar um objeto já instanciado pelo nome usando uma string [RESOLVIDO]

5 respostas
B

Olá galera

Como eu faria para acessar um objeto já instanciado pelo nome?

exemplo

JTextArea jtarea1 = new JTextArea(); // aqui eu instancio o primeiro
JTextArea jtarea2 = new JTextArea(); // aqui eu instancio o segundo

...

        for (int i = 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á

To no aguardo pessoal

5 Respostas

Ar0n

Caro acho que nesse caso o melhor é criar um array, usando array seu código ficaria assim.

JTextArea [] jtarea = new JTextArea[2];

	.....

		for(int i = 0; i < 2; i ++){
		      System.out.println(jtarea[i].getText());
		}
davidbuzatto
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 JTextArea
Map<String, JTextArea> m = new HashMap<String, JTextArea>();

// criando os componentes (troquei os nomes para vc não confundir com o código abaixo)...
JTextArea jt1 = new JTextArea();
JTextArea jt2 = new JTextArea();

// 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 ( int i = 1; i < 3; i++ ) {
    // pegando as referências pelo nome
    System.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… :wink:

JTextArea jtarea1 = new JTextArea();
JTextArea jtarea2 = new JTextArea();
  
...  
  

               System.out.println( jtarea1.getText() );
sergiotaborda

branet77:
Olá galera

Como eu faria para acessar um objeto já instanciado pelo nome?

exemplo

JTextArea jtarea1 = new JTextArea(); // aqui eu instancio o primeiro
JTextArea jtarea2 = new JTextArea(); // aqui eu instancio o segundo

...

        for (int i = 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

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.

Vlw Galera

Um abraço

Criado 26 de janeiro de 2013
Ultima resposta 26 de jan. de 2013
Respostas 5
Participantes 5