Continuando con nuestro tutorial de reflection, anteriormente habíamos visto Constructores Fields en el Api reflect, hoy vamos a ver como obtener los métodos.
Java Reflection - Metodos / Methods
Bueno con reflection podemos acceder a los metodos de una clase. Vamos a utilizar la clase Methods que obviamente se encuentra contenida en el package java.lang.reflect.- equals(Object obj): Compara este Method contra otro objeto especifico.
- toGenericString(): Retorna un string describiendo este Method, incluyendo el tipo de parametros.
- toString(): Retorna un string describiendo el este Method.
- getAnnotation(Class<T> annotationClass): Retorna las anotaciones que poseen los elementos para un tipo especifico si una anotacion esta presenta, de otra manera retorna null.
- getDeclaredAnnotations(): Retorna todas las anotaciones que son directamente presentadas en este elemento.
- getDeclaringClass(): Retorna el objecto Class presentado por las class o la interface que son declarados en el campo representado por el tipo de objeto Method.
- getDefaultValue(): Retorna el valor por defecto para el miembro de la anotacion representada por la instancia del método.
- getExceptionTypes(): Retorna un array de objetos de clase que representan el tipo de una excepción declarada para ser lanzada por debajo del metodo representado por el objeto Method.
- getGenericExceptionTypes(): Retorna un array de tipos objetos que representan excepciones declaradas para ser lanzadas por el objeto Method.
- getGenericParameterTypes(): Retorna un array de objetos Type que representan directamente al tipo de parametro, en un orden determinado, del metodo representado por el objeto Method.
- getGenericReturnType(): Retorna un tipo de objeto Type, que esta representado por un tipo declarado de un metodo representado por el objeto Method.
- getModifiers(): Retorna los modificadores del lenguaje Java para los campos representados por el objeto Method, como un Integer.
- getName(): Retorna el nombre del campo presentando como un objeto Method.
- getParameterAnnotations(): Retorna un array de arrays que representa las anotaciones en forma de parámetros, declarados en orden, del tipo de objeto Method.
- getParameterTypes(): Retorna un array de objetos que representan el los tipos de parámetros en un orden declarado, del tipo de objeto Method.
- hashCode(): Retorna un hashcode del Method.
- invoke(Object obj, Object... args): Invoca por debajo métodos representandos por el objeto Method, en el objeto especifico con los parámetros especificados.
- isBridge(): Retorna verdadero si el método es un método puente, retorna falso si no.
- isSynthetic(): Retorna verdadero si el método es un sintética, en otro caso retorna falso.
- isVarArgs(): Retorna verdadero si el método que fue declarado retorna un numero de argumentos, si no retorna falso.
Bueno empecemos a ver en código un ejemplo de Api Reflection como acceder a los métodos.
Supongamos que tenemos la clase Persona:
Utilizaremos la clase Method del packages java.lang.reflect.
Bueno primero obtengamos la clase, como vimos anteriormente (clic acá!)
Class clase;
clase = Class.forName("ar.com.nico.Persona");
En nuestro caso utilizaremos el llamado de la clase no instanciada, ahora obtengamos los metodos de dicha clase.
Method[] useField = clase.getMethods();
Tenemos que tener en cuenta que traeremos los metodos que son públicos.
Pregunta, pero por que es un Array? es decir por que es Field[]?, la respuesta es obvia por que nos puede devolver mas de un campo.
Finalmente recorremos y mostramos por pantalla los metodos.
Method campos;
for (int i=0; i < useField.length; i++) {
campos = useField[i];
System.out.println("\n\t" + campos.getName() );
}
Ejemplo completo:
Saludos
Java Reflection - Metodos / Methods
Reviewed by El lado oscuro de java
on
febrero 25, 2016
Rating:
Primero que nada gracias por el aporte. Segundo quería consultar si la idea general del api reflection es obtener constructores, campos, metodos de una clase (a traves de información parametrizada, almacenada o provista en tiempo de ejecución) para usar dichos metodos o campos de la clase?, por ejemplo para no rehacer ciertas rutinas lógicas que ya pueden estar contenidas en otra clase. Tienes pensado subir un ejemplo práctico completo con respecto a este api? Gracias de antemano.
ResponderEliminar