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á
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…
JTextArea jtarea1 = new JTextArea();
JTextArea jtarea2 = new JTextArea();
...
System.out.println( jtarea1.getText() );
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.
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.