Tenho por exemplo minha classe Pessoa com seus atributos nome e idade, ambos private com seus métodos de acesso get e set.Também tenho minha tabela Pessoa respectivamente com os mesmos atributos.A forma mais comun de preencher o objeto Pessoa é dando um set nos seus atributos, até ai ta todo mundo CARECA de saber.
A minha duvída é a seguinte:
Teria eu pobre e relez mortal, possiblidade de preencher este objeto dinamicamente,
afinal o nome das campos são os mesmos somente “setaria” seus valores.
Conseguir o metodo até consigo,não sei se é a forma correta :
Class classe = obj.getClass();
Method method[] = classe.getDeclaredMethods();
for(int i=0;i<method.length;i++){
if(method[i].getName().indexOf("set")>=0){
method[i].getName();
}
}
Mas ai chegar ao ponto final que é “popular”, se é que posso chamar assim, o objeto ja são outros quinhentos.
Se algum de voces conheçe alguma API, classe ou ainda talvez isso nem seja possivel, deêm um toque ai.
A resposta para seu problema é o uso de um Desig Pattern conhecido como Property Container com Hastable (também poderia ser um HashMap). Tenho um paper que explica melhor. Se quiser, e-mail-me.
Segue exemplo mencionado no paper:
public abstract class PropertyContainerImpl
implements PropertyContainer, Serializable
{
protected Hashtable ivProperties = new Hashtable(2);
public PropertyContainerImpl() {
}
/**
* Add a property associated with a token name.
* If the token already exists, the value will be replaced.
* If the token does not exist, it will be added with the value.
* @param value is an object that cannot be null
* @param token is a key that can be used to retrieve the value
*/
public void addPropertyBy(Object value, String token) {
if(value==null || token==null) return;
if(ivProperties.containsKey(token)){
ivProperties.remove(token);
}
ivProperties.put(token, value);
}
/**
* Retrieve a value by a particular token.
* @param token is a key that can be used to retrieve the value
* @return Object is the value associated with the token. It
* will not be null.
*/
public Object getPropertyBy(String token) {
if(token==null) return null;
return ivProperties.get(token);
}
/**
* Retrieve all property keys currently in use.
* @return String[] is an array of all valid token names.
*/
public String[] getPropertyKeys() {
String keys[] = null;
synchronized(ivProperties){
int s = ivProperties.size();
keys = new String[s];
Enumeration e = ivProperties.keys();
int i = 0;
while(e.hasMoreElements()){
keys[i] = (String)e.nextElement();
i++;
}
}
return keys;
}
/**
* Remove a value associated with a particular token.
* @param token is a key associated with a value that was added
*/
public void removeProperty(String token) {
if(token==null) return;
ivProperties.remove(token);
}
}
Jairelton
Cara vc tem razão. Já conhecia o hibernate mas nao o JDO o qual achei bem interessante e ja estou estudando sobre.Obrigado pela dica.
BrunoCarlo
Testei teu codigo e deu certo.Como é algo que é pra ontem é bem o que eu preciso, valeu pela ajuda.Mas volto a bater na mesma tecla do jairelton realmente não precisamos reiventar a roda.Valeu mesmo.
Taz:
Vou te mandar um e-mail pra vc sobre este paper, também quero aprender mais um item que não conhecia.
Obrigado aos três graças pessoas como vcs que o portal java é um site 10. :razz: