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

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

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());
		}

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:

[code]// 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() );
}[/code]

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() ); 

[quote=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á
[/quote]

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.

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