Alguem conhece um bom metodo recursivo q faça chamadas colhedo informações por toda a hierarquia de um objeto ( passando para outro objeto e assim vai ) ?
Leonardo Schmitt
Alguem conhece um bom metodo recursivo q faça chamadas colhedo informações por toda a hierarquia de um objeto ( passando para outro objeto e assim vai ) ?
Leonardo Schmitt
Estude o pattern Composite
Márcio
Nao entendi, Marcio…
Pelo que entendo, o que ele quer eh ir descobrindo a hierarquia de objetos. Reflection 101 
é o seguinte eu tenho dois objetos de mesma classe, o codigo abaixo pega os dois objetos e compara seus metodos get´s e is´s me informando em uma mensagem os seus metodos iguais podem testar se quiserem para ver como funciona , mas, o q eu quero agora é no final por um ultimo else como… e se for um outro objeto e não um tipo primitivo como vou lá no outro objeto da hierarquia e buscar os seus metodos?
public class ClasseTeste {
String nome;
long i;
int y;
boolean flag;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public long getI() {
return i;
}
public void setI(long i) {
this.i = i;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
import java.lang.reflect.*;
public class CompareObjetos
{
public static void main( String args[] )
{
ClasseTeste o1, o2;
o1 = new ClasseTeste();
o2 = new ClasseTeste();
compare(o1, o2);
}
public static int compare( Object o1, Object o2 )
{
Method[] umaListaMetodos = o1.getClass().getDeclaredMethods();
boolean ehDiferente = false;
for( int i = 0; i < umaListaMetodos.length; i++ )
{
if( umaListaMetodos[i].getName().startsWith("get") || umaListaMetodos[i].getName().startsWith("is") )
{
try {
Class umaClasse = umaListaMetodos[i].getReturnType();
Object objRetornado1 = umaListaMetodos[i].invoke(o1, null );
Object objRetornado2 = umaListaMetodos[i].invoke(o2, null );
if( !objRetornado1.equals( objRetornado2 ) )
return 1;
else if( umaClasse == int.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == String.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == long.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == double.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == short.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == byte.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == char.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == boolean.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}else if( umaClasse == float.class ){
ehDiferente = true;
System.out.println( "Metodo: "+umaListaMetodos[i].toGenericString() );
}
}
catch( Exception e ){ e.printStackTrace(); }
} //else aqui para fazer recursao se for objeto
}
return 1;
}
}
botei o else no local errado é mais acima claro :lol:
Shoes,
Eu estava envolvido com meu problema e achei que o dele era parecdio. Estou varrendo uma árvore e buscando um total.
Foi mal amigos,
Márcio
Só tome cuidado com ciclos 
Por exemplo, o seu método recursivo tem de tomar cuidado com este conjunto de classes:
class Class1 {
public Class3 class3 = new Class3();
}
class Class2 {
public Class1 class1 = new Class1();
}
class Class3 {
public Class2 class2 = new Class2();
}
class TestRecursive {
public static void main(String[] args) {
Class3 class3 = new Class3();
}
}
(a propósito, se você executar java -cp . TestRecursive, o que ocorre?)