E o seguinte, eu preciso de uma função que receba uma string e consiga
converter essa string em um nome de variável. Simples. Strings se
transformando em variáveis!!! tipo:
Stringvar1;Stringvar2;Stringvar3;
System.out.println(var + i) ??
Porque alguém ia querer uma coisa dessa???
Explico. O meu programa vai criar uma certa quantidade de objetos, e eu
gostaria de que esses objetos fossem criados através da concatenação
de um
nome com um número que será incrementado.
exemplo:
obj1
obj2
obj3
Porque vc não usa um Array ao invés de uma variável comum?
Por exemplo:
Stringvar[] = new String[30];//entre colchetes coloque o número//deobjetosquevcvaicriar.//aívcpodeatribuirassim:var[1]="primeira string";var[2]="segunda string";//oupodeatribuirusandoumloopfor(int i=0;i<var.length;i++){var[i]="uma string qualquer";}
Isso deve resolver, se vc souber a quantidade de objetos que será criada, porém se vc não souber aí eu aconselho vc procurar um material sobre a API Coleções, mais especificamente a class Vector do pacote java.util
té +
M
matheusPJ
cara, valores strings sendo passados para nome de variáveis… isso é muito doido, não tem jeito não… acho q só javascript faz isso, com eval() :lol:
V
vieciliPJ
“cazevedo”:
E o seguinte, eu preciso de uma função que receba uma string e consiga
converter essa string em um nome de variável. Simples. Strings se
transformando em variáveis!!! tipo:
Stringvar1;Stringvar2;Stringvar3;
System.out.println(var + i) ??
Porque alguém ia querer uma coisa dessa???
Explico. O meu programa vai criar uma certa quantidade de objetos, e eu
gostaria de que esses objetos fossem criados através da concatenação
de um
nome com um número que será incrementado.
exemplo:
obj1
obj2
obj3
Cara, isso não faz muito sentido pra mim… mas se vc quiser saber o nome dos atributos de uma instancia de um objeto definido por uma classe podes fazer o seguinte:
public printFields(Object obj) {
java.lang.reflect.Field[] fields = obj.getClass().getFields();
for (int i = 0; i < fields.length; i++)
System.out.println(fields[i].getName()+"["+fields[i].getType()+"]");
}
Ultima pergunta, pq vc quer criar atributos em tempo de execução se o código prévio da classe não saberá qual o nome de cada atributo e não poderá fazer nada com eles?
Teoricamente, vc pode fazer tudo o q quiser com as classes ‘reflection’ mas não sei se vc vai conseguir fazer isto… fiquei curioso, vou testar algumas coisas aki
V
vieciliPJ
Minhas tentativas foram:
importjava.lang.reflect.*;publicclassMain{publicObjectobjeto;Main(){objeto=newObject();}publicstaticvoidmain(Stringargs[]){try{Mainm=newMain();m.dumpFields();//Field novo = m.getClass().getField("novo");//Field novo = (Field) Class.forName("java.lang.reflect.Field").newInstance();Fieldnovo=m.getClass().getField("objeto");novo.setAccessible(true);novo.set(m,newInteger(1));m.dumpFields();}catch(Exceptione){e.printStackTrace();}}publicvoiddumpFields(){Field[]fields=this.getClass().getFields();for(inti=0;i<fields.length;i++)System.out.println(fields[i].getName()+"["+fields[i].getType()+"]");}}
Em nenhuma obtive êxito, experimente executar cada linha comentada em separado...