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:
Code:
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:
Code:
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.
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/jug-petropolis/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/