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.
