Comparação de objetos (conexão de métodos)

Tenho aqui estas duas classe que servem para comparar objetos e retornar seus dados de classe (metodos, campos, nomes de classe e metodos etc) so que não sei como conecto esse dois programas quero chamar o ReflectionTeste no ultimo else da classe CompareObjetos , estou começando agora e tenho duvidas basicas em alguns casos.

ai vai os codigos:

import java.lang.reflect.*;
import TesteLeo.ReflectionTeste.*;

public class CompareObjetos 
{
	public static void main( String args[] )
	{
		 //ClasseTeste o1, o2;
	    //o1 = new ClasseTeste();
        //o2 = new ClasseTeste();
		
		Employee o1 = new Employee( "Leonardo", "Schmitt",7, 24, 49, 3, 12, 88 );
		Employee o2 = new Employee( "Leonardo", "Schmitt", 7, 24, 49, 3, 12, 88 );
		
		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 );
					String nameobj = o1.getClass().getName();
										
					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() );
					
					}else
						Class.forName( "TesteLeo.ReflectionTeste " + nameobj ); // quero o chamar aqui mas não tenho certeza como
					                                                            // esse instruçao não retorna nada.
				}
				catch( Exception e ){ e.printStackTrace(); }
			}
		}
		return 1;
	}
	
}	

e a classe refletionteste é a seguinte:

package TesteLeo;

import java.lang.reflect.*;
import java.util.*;

public class ReflectionTeste 
{
	public static void main( String args[] )
	{
		String name;
		if( args.length > 0 )
			name = args[0];
		else
		{
			Scanner in = new Scanner( System.in );
			System.out.println( "Entre com o nome da classe: (ex: java.util.Date)");
			name = in.next();
		} 
		//public ReflectionTeste( String name )
		//{
	    try
		{
			Class cl = Class.forName( name );
			Class supercl = cl.getSuperclass();
			System.out.println("class " + name );
			if( supercl != null && supercl != Object.class )
				System.out.print(" extends " + supercl.getName() );
			
			System.out.print("{\n");
			printConstructors(cl);
			System.out.println();
			printMethods(cl);
			System.out.println();
			printFields(cl);
			System.out.println("\n}");
		}
		catch( ClassNotFoundException e ) { e.printStackTrace(); }
		System.exit( 0 );
		
	}
	
	/**
	 * Mostra todos os contrutores da classe
	 * @param cl a class
	 */
	
	public static void printConstructors( Class cl )
	{
		Constructor[] constructors = cl.getDeclaredConstructors();
		
		for( Constructor c : constructors )
		{
			String name = c.getName();
			System.out.print(" " + Modifier.toString(c.getModifiers() ) );
			System.out.print(" "+ name + "(" );
			
			//Mostra tipos
			Class[] paramTypes = c.getParameterTypes();
			for( int j = 0; j < paramTypes.length; j++ )
			{
				if( j > 0 ) System.out.println(", ");
				System.out.print( paramTypes[j].getName() );
			}
			System.out.println( ");" );
		}
	}
	
	/**
	 * Mostra todos os metodos da classe
	 * @param cl a class
	 */
	
	public static void printMethods( Class cl )
	{
		Method[] methods = cl.getDeclaredMethods();
		
		for( Method m : methods )
		{
			Class refType = m.getReturnType();
			String name = m.getName();
			
			System.out.print(" " + Modifier.toString(m.getModifiers() ) );
			System.out.print(" "+ refType.getName() + " " + name + "(" );
			
			//Mostra tipos
			Class[] paramTypes = m.getParameterTypes();
			for( int j = 0; j < paramTypes.length; j++ )
			{
				if( j > 0 )System.out.println(", ");
				System.out.print( paramTypes[j].getName() );
			}
			System.out.println(");");
		}
	}
	
	/**
	 * Mostra todos os Campos da classe
	 * @param cl a class
	 */
	
	public static void printFields( Class cl )
	{
		Field[] fields = cl.getDeclaredFields();
		
		for( Field f : fields )
		{
			Class type = f.getType();
			String name = f.getName();
			
			System.out.print(" " + Modifier.toString(f.getModifiers() ) );
			System.out.print(" "+ type.getName() + " " + name + ";" );
		}
	}

}

agradeço à quem possa me ajudar.

Não entendi qual a sua dúvida, mas…

O método compare(o1, o2) retorna um int do resultado da comparação.

quero chamar o ReflectionTeste dentro do Compare para atraves do reflection imprimir todos os dados da classe o1 por exemplo de compare

digo do objeto o1 como os nomes dos metodos , dos campos, da classe etc

ReflectionTeste.nomeDoMetodoQueVoceQuer( parâmetros );

besouro chucro, besouro chucro, besouro chucro
:lol: a muito não vi esse filme .

Eu não vou aparecer, mesmo pq o correto é dizer:

besouro suco, besouro suco, beso…

(O nome original é Beetle Juice )

Melhor eu parar se não você já sabe!

pior q e mesmo faz tanto tempo que troquei as palavras ( ainda bem ) :oops: :wink:

Voltando ao assunto, pq vc esta usando reflection pra escrever um simples compareTo()? Nao era mais facil bater um instanceof de o1 e o2 e jogar uma exception se o cara estiver tentando comparar Bananas com NavioCargueiros?