r01f.reflection
Class ReflectionUtils

java.lang.Object
  extended by r01f.reflection.ReflectionUtils

public class ReflectionUtils
extends java.lang.Object

Clase auxiliar para metodos de introspeccion


Nested Class Summary
static class ReflectionUtils.FieldAnnotated<A extends java.lang.annotation.Annotation>
           
private static class ReflectionUtils.SetAccessibleAction
           
 
Field Summary
private static java.lang.Class<?>[] EMPTY_CLASS_ARRAY
           
private static java.lang.Object[] EMPTY_OBJECT_ARRAY
           
private static java.util.Set<java.lang.Class<?>> FINAL_IMMUTABLE_CLASSES
           
 
Constructor Summary
ReflectionUtils()
           
 
Method Summary
static java.lang.reflect.Method _fieldGetterName(java.lang.Class<?> type, java.lang.String fieldName, java.lang.Class<?> memberType)
          Obtiene el nombre del metodo getter de un miembro en una clase
private static java.lang.reflect.Method _fieldSetterName(java.lang.Class<?> type, java.lang.String fieldName, java.lang.Class<?> memberType)
          Obtiene el nombre del metodo setter de un miembro en una clase
private static
<T> T
_getFieldValueWithoutUsingAccessors(java.lang.Class<?> type, java.lang.Object obj, java.lang.String fieldName)
          Devuelve el valor de un miembro SIN utilizar metodos get/set
private static java.lang.String[] _parsePathElem(java.lang.String pathElem)
          Obtiene el nombre del miembro y el index o clave en el caso de que elemento del path sea una referencia a array, lista o mapa
private static void _setFieldValueWithoutUsingAccessors(java.lang.Class<?> type, java.lang.Object obj, java.lang.String fieldName, java.lang.Object value)
          Establece el valor de un miembro SIN utilizar metodos get/set
static java.lang.reflect.Field[] allFields(java.lang.Class<?> type)
          Obtiene un array con la DEFINICION de todos los miembros de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getFields() devuelve solo miembros PUBLICOS class.getDeclaredFields() devuelve miembros publicos y privados declarados en la propia clase (ignora la herencia)
static java.util.Map<java.lang.String,java.lang.reflect.Field> allFieldsMap(java.lang.Class<?> type)
          Obtiene un mapa con la DEFINICION de todos los miembros de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getFields() devuelve solo miembros PUBLICOS class.getDeclaredFields() devuelve miembros publicos y privados declarados en la propia clase (ignora la herencia)
static java.lang.reflect.Method[] allMethods(java.lang.Class<?> type)
          Obtiene un array con la DEFINICION de todos los metodos de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getMethods() devuelve solo metodos PUBLICOS class.getDeclaredMethods() devuelve metodos publicos y privados declarados en la propia clase (ignora la herencia)
static java.lang.String[] classAndPackageFromClassName(java.lang.String classNameIncludingPackage)
          Obtiene el paquete y el nombre de la clase separados en un array de dos elementos [0]-Paquete (null si no hay paquete) [1]-Clase
static java.lang.String classNameFromClassName(java.lang.String classNameIncludingPackage)
          Obtiene el nombre de la clase a partir del nombre completo incluyendo el paquete
static java.lang.Class<?> classOfType(java.lang.reflect.Type type)
          Obtiene la clase subyacente de un tipo
static java.lang.Class<?> collectionFieldComponentType(java.lang.reflect.Field field)
          Devuelve el tipo de elementos de una colección Collection o un array parametrizado (Collection) NOTA: Debido al type erasure de los genericos en java el tipo de un List SOLO se puede obtener si se trata de un field de una clase (miembro), pero NO si se trata de una variable dentro del flujo
static java.lang.String composeClassMethodsSignatures(java.lang.Class<?> type)
          Imprime información de debug sobre los metodos de una clase
static java.lang.String composeMethodSignature(java.lang.reflect.Method m)
          Compone la signatura de un metodo: clase.metodo(params..)
static java.lang.String composeMethodSignature(java.lang.String className, java.lang.String methodName, java.lang.Class<?>[] paramTypes)
          Compone la signatura de un metodo: clase.metodo(params..)
static
<T> T
createInstanceOf(java.lang.Class<?> type)
          Obtiene una instancia de un objeto utilizando el constructor vacio
static
<T> T
createInstanceOf(java.lang.Class<?> type, java.lang.Class<?>[] constructorArgsTypes, java.lang.Object[] constructorArgs)
          Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase
static
<T> T
createInstanceOf(java.lang.Class<?> type, java.lang.Class<?>[] constructorArgsTypes, java.lang.Object[] constructorArgs, boolean force)
          Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase
static
<T> T
createInstanceOf(java.lang.String className)
          Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase y utilizando el constructor por defecto Por defecto intenta hacer accesible el constructor...
static
<T> T
createInstanceOf(java.lang.String className, java.lang.Class<?>[] constructorArgsTypes, java.lang.Object[] constructorArgs)
          Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase
static
<T> T
createInstanceOf(java.lang.String className, java.lang.Class<?>[] constructorArgsTypes, java.lang.Object[] constructorArgs, boolean force)
          Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase
static java.lang.reflect.Field field(java.lang.Class<?> type, java.lang.String fieldName, boolean force)
          Obtiene la DEFINICION de un miembro de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getFields() devuelve solo miembros PUBLICOS class.getDeclaredFields() devuelve miembros publicos y privados declarados en la propia clase (ignora la herencia)
static java.util.Map<java.lang.Class<? extends java.lang.annotation.Annotation>,ReflectionUtils.FieldAnnotated<? extends java.lang.annotation.Annotation>[]> fieldsAnnotated(java.lang.Class<?> annotationType)
          Obtiene todos los fields de una clase relacionados con su anotacion
static
<A extends java.lang.annotation.Annotation>
ReflectionUtils.FieldAnnotated<A>[]
fieldsAnnotated(java.lang.Class<?> type, java.lang.Class<A> annotationType)
          Devuelve los fields de una clase anotados con una determinada notacion
static java.lang.Class<?> fieldType(java.lang.Class<?> type, java.lang.String fieldName)
          Devuelve el tipo de un campo
static
<T> T
fieldValue(java.lang.Object obj, java.lang.reflect.Field field, boolean useAccessor)
          Devuelve el valor de un miembro de una clase
static
<T> T
fieldValue(java.lang.Object obj, java.lang.String fieldName, boolean useAccessor)
          Devuelve el valor de un miembro de una clase
static
<T> T
fieldValue(java.lang.Object obj, java.lang.String fieldName, java.lang.Class<?> fieldType, boolean useAccessor)
          Obtiene el valor de un miembro en un objeto, bien accediendo directamente al miembro o bien utilizando un accessor (get[fieldName])
static java.lang.Object getMemberValueUsingPath(java.lang.Object obj, java.lang.String memberPath, boolean useAccesors)
          Funcion que se encarga de obtener un valor de una jerarquia de objetos El path al miembro se pasa como parametro en la variable memberPath que tiene la siguiente estructura: obj.member.member.member...
static
<T> T
getStaticFieldValue(java.lang.Class<?> type, java.lang.String fieldName)
          Devuelve el valor de un miembro estatico
static java.lang.Object invokeMethod(java.lang.Object obj, java.lang.reflect.Method method, java.lang.Object... argValues)
          Invoca un metodo sobre un objeto
static java.lang.Object invokeMethod(java.lang.Object obj, java.lang.String methodName, java.lang.Class<?>[] argsTypes, java.lang.Object[] argsValues)
          Invoca un metodo sobre un objeto
static java.lang.Object invokeStaticMethod(java.lang.Class<?> type, java.lang.reflect.Method method, java.lang.Object... argsValues)
          Invoca un metodo ESTATICO sobre un objeto
static java.lang.Object invokeStaticMethod(java.lang.Class<?> type, java.lang.String methodName, java.lang.Class<?>[] argsTypes, java.lang.Object[] argsValues)
          Invoca un metodo ESTATICO sobre un objeto
static boolean isFinalInmutable(java.lang.Class<?> type)
          Comprueba si un tipo es final inmutable: String, byte, short, integer, long, float, double, character o boolean
static boolean isImplementing(java.lang.Class<?> type, java.lang.Class<?> theInterface)
          Comprueba si una clase o sus super-clases implementan un determinado interface
static boolean isSameClassAs(java.lang.Class<?> type, java.lang.Class<?> otherType)
          Comprueba si una clase es igual que la otra
static boolean isSameClassAs(java.lang.Object theObj, java.lang.Object theOtherObj)
          Comprueba si dos objetos son de la misma clase
static boolean isSubClassOf(java.lang.Class<?> type, java.lang.Class<?> superType)
          Recorre la jerarquia de herencia para ver si una clase es subclase de otra que se pasa como parametro
static boolean isSubClassOf(java.lang.Object theObj, java.lang.Object theBaseObj)
          Recorre la jerarquia de herencia para ver si un objeto es subclase de otro que se pasa como parametro
static void makeAccessible(java.lang.reflect.AccessibleObject o)
          Establece el flag accessible en el AccessibleObject
static java.lang.Class<?>[] mapFieldKeyValueComponentTypes(java.lang.reflect.Field field)
          Devuelve el tipo de elementos la clave y valor de un Mapa Map parametrizado (Map) NOTA: Debido al type erasure de los genericos en java el tipo de un List SOLO se puede obtener si se trata de un field de una clase (miembro), pero NO si se trata de una variable dentro del flujo
static java.lang.reflect.Method method(java.lang.Class<?> type, java.lang.String methodName, java.lang.Class<?>... paramTypes)
          Busca el metodo que se pasa como parameto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getMethods() devuelve solo metodos PUBLICOS class.getDeclaredMethods() devuelve metodos publicos y privados declarados
static java.lang.String packageFromClassName(java.lang.String classNameIncludingPackage)
          Obtiene el nombre del paqueta a partir del nombre completo incluyendo el paquete
static void setAccessible(java.lang.reflect.AccessibleObject o, boolean accessible)
          Sets the accessible flag of the given AccessibleObject to the given boolean value.
static void setAccessibleIgnoringExceptions(java.lang.reflect.AccessibleObject o, boolean accessible)
          Establece el flag accessible en el AccessibleObject ignorando excepciones
static void setFieldValue(java.lang.Object obj, java.lang.reflect.Field field, java.lang.Object value, boolean useAccessors)
          Establece el valor de un miembro
static void setFieldValue(java.lang.Object obj, java.lang.String fieldName, java.lang.Object value)
          Establece el valor de un miembro (field) en un objeto bien accediendo directamente a la variable miembro bien utilizando un accessor set[fieldName]
static void setFieldValue(java.lang.Object obj, java.lang.String fieldName, java.lang.Object value, boolean useAccessor)
          Establece el valor de un miembro (field) en un objeto bien accediendo directamente a la variable miembro bien utilizando un accessor set[fieldName]
static void setFieldValueUsingPath(java.lang.Object obj, java.lang.String memberPath, java.lang.Object memberValue, boolean useAccesors)
          Funcion que se encarga de establecer el valor de un miembro en una jerarquía de objetos El path al miembro se pasa como parametro en la variable memberPath que tiene la siguiente estructura: obj.member.member.member...
static void setStaticFieldValue(java.lang.Class<?> type, java.lang.String fieldName, java.lang.Object value)
          Establece el valor de un miembro estatico
static java.lang.reflect.Method staticMethod(java.lang.Class<?> type, java.lang.String methodName, java.lang.Class<?>... argsTypes)
          Devuelve un metodo ESTATICO de una clase
static
<A extends java.lang.annotation.Annotation>
A
typeAnnotation(java.lang.Class<?> type, java.lang.Class<A> annotationType)
          Devuelve una anotación concreta en una clase
static java.lang.annotation.Annotation[] typeAnnotations(java.lang.Class<?> type)
          Devuelve todas las anotaciones de un tipo
static java.lang.Class<?> typeFromClassName(java.lang.String className)
          Obtiene la definición de una clase (Class) a partir del nombre completo (incluido paquete) de la clase
static
<T> java.lang.Class<? extends T>
typeFromClassName(java.lang.String className, java.lang.Class<T> type)
          Obtiene la definición de una clase haciendo un cast casts para representar una sublase de la clase representada por el nombre suministrado.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FINAL_IMMUTABLE_CLASSES

private static final java.util.Set<java.lang.Class<?>> FINAL_IMMUTABLE_CLASSES

EMPTY_OBJECT_ARRAY

private static final java.lang.Object[] EMPTY_OBJECT_ARRAY

EMPTY_CLASS_ARRAY

private static final java.lang.Class<?>[] EMPTY_CLASS_ARRAY
Constructor Detail

ReflectionUtils

public ReflectionUtils()
Method Detail

isFinalInmutable

public static boolean isFinalInmutable(java.lang.Class<?> type)
Comprueba si un tipo es final inmutable: String, byte, short, integer, long, float, double, character o boolean

Parameters:
type - La definición de la clase
Returns:
true si el tipo es final inmutable

classNameFromClassName

public static java.lang.String classNameFromClassName(java.lang.String classNameIncludingPackage)
Obtiene el nombre de la clase a partir del nombre completo incluyendo el paquete

Parameters:
classNameIncludingPackage - El nombre de la clase completo: paquete.nombreClase
Returns:
La parte del nombre de la clase

packageFromClassName

public static java.lang.String packageFromClassName(java.lang.String classNameIncludingPackage)
Obtiene el nombre del paqueta a partir del nombre completo incluyendo el paquete

Parameters:
classNameIncludingPackage - nombre de la classe completo: paquete.nombreClase
Returns:
La parte del paquete

classAndPackageFromClassName

public static java.lang.String[] classAndPackageFromClassName(java.lang.String classNameIncludingPackage)
Obtiene el paquete y el nombre de la clase separados en un array de dos elementos [0]-Paquete (null si no hay paquete) [1]-Clase

Parameters:
classNameIncludingPackage -
Returns:

isImplementing

public static boolean isImplementing(java.lang.Class<?> type,
                                     java.lang.Class<?> theInterface)
Comprueba si una clase o sus super-clases implementan un determinado interface

Parameters:
type - el tipo
theInterface - el interfaz que se comprueba
Returns:
true si se implementa y false en otro caso

isSubClassOf

public static boolean isSubClassOf(java.lang.Class<?> type,
                                   java.lang.Class<?> superType)
Recorre la jerarquia de herencia para ver si una clase es subclase de otra que se pasa como parametro

Parameters:
type - La clase
superType - La clase base
Returns:
true si la clase es una subclase de la clase base

isSubClassOf

public static boolean isSubClassOf(java.lang.Object theObj,
                                   java.lang.Object theBaseObj)
Recorre la jerarquia de herencia para ver si un objeto es subclase de otro que se pasa como parametro

Parameters:
theObj - un objeto
theBaseObj - el objeto base
Returns:
true si el objeto es una subclase del objeto base

isSameClassAs

public static boolean isSameClassAs(java.lang.Class<?> type,
                                    java.lang.Class<?> otherType)
Comprueba si una clase es igual que la otra

Parameters:
type - la clase
otherType - la otra clase
Returns:
true si son la misma clase

isSameClassAs

public static boolean isSameClassAs(java.lang.Object theObj,
                                    java.lang.Object theOtherObj)
Comprueba si dos objetos son de la misma clase

Parameters:
theObj - uno de los objetos
theOtherObj - el otro objeto
Returns:
true si son la misma clase

typeFromClassName

public static java.lang.Class<?> typeFromClassName(java.lang.String className)
Obtiene la definición de una clase (Class) a partir del nombre completo (incluido paquete) de la clase

Parameters:
className - El nombre completo de la clase
Returns:
La definicion de la clase (Class) (NO UNA INSTANCIA)
Throws:
ReflectionException - si la clase no se encuentra

typeFromClassName

public static <T> java.lang.Class<? extends T> typeFromClassName(java.lang.String className,
                                                                 java.lang.Class<T> type)
Obtiene la definición de una clase haciendo un cast casts para representar una sublase de la clase representada por el nombre suministrado.

Parameters:
className -
type -
Returns:

typeAnnotations

public static java.lang.annotation.Annotation[] typeAnnotations(java.lang.Class<?> type)
Devuelve todas las anotaciones de un tipo

Parameters:
type - el tipo
Returns:

typeAnnotation

public static <A extends java.lang.annotation.Annotation> A typeAnnotation(java.lang.Class<?> type,
                                                                           java.lang.Class<A> annotationType)
Devuelve una anotación concreta en una clase

Parameters:
type - el tipo
annotationType - el tipo de la anotación
Returns:

createInstanceOf

public static <T> T createInstanceOf(java.lang.String className)
Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase y utilizando el constructor por defecto Por defecto intenta hacer accesible el constructor...

Parameters:
className - El nombre de la clase (completo)
Returns:
la instancia del objeto
Throws:
ReflectionException - si no se puede obtener la instancia del objeto

createInstanceOf

public static <T> T createInstanceOf(java.lang.Class<?> type)
Obtiene una instancia de un objeto utilizando el constructor vacio

Parameters:
type - La definición del objeto
Returns:
la instancia recién creada
Throws:
ReflectionException - si el objeto no se puede crear

createInstanceOf

public static <T> T createInstanceOf(java.lang.String className,
                                     java.lang.Class<?>[] constructorArgsTypes,
                                     java.lang.Object[] constructorArgs)
Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase

Parameters:
className - El nombre de la clase (completo)
constructorArgsTypes - definiciones de las clases parámetros del constructor
constructorArgs - Argumentos del constructor
Returns:
El objeto recién creado
Throws:
ReflectionException - si no se puede obtener una instancia del objeto

createInstanceOf

public static <T> T createInstanceOf(java.lang.String className,
                                     java.lang.Class<?>[] constructorArgsTypes,
                                     java.lang.Object[] constructorArgs,
                                     boolean force)
Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase

Parameters:
className - El nombre de la clase (completo)
constructorArgsTypes - definiciones de las clases parámetros del constructor
constructorArgs - Argumentos del constructor
force - Si hay que forzar la accesibilidad del constructor (pe si es privado)
Returns:
El objeto recién creado
Throws:
ReflectionException - si no se puede obtener una instancia del objeto

createInstanceOf

public static <T> T createInstanceOf(java.lang.Class<?> type,
                                     java.lang.Class<?>[] constructorArgsTypes,
                                     java.lang.Object[] constructorArgs)
Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase

Parameters:
type - la definicion de la clase
constructorArgsTypes - definiciones de las clases parámetros del constructor
constructorArgs - Argumentos del constructor
Returns:
El objeto recién creado
Throws:
ReflectionException - si no se puede obtener la instancia del objeto

createInstanceOf

public static <T> T createInstanceOf(java.lang.Class<?> type,
                                     java.lang.Class<?>[] constructorArgsTypes,
                                     java.lang.Object[] constructorArgs,
                                     boolean force)
Obtiene una instancia de una clase a partir del nombre completo (incluido paquete) de la clase

Parameters:
type - la definicion de la clase
constructorArgsTypes - definiciones de las clases parámetros del constructor
constructorArgs - Argumentos del constructor
force - Si hay que forzar la accesibilidad del constructor (pe si es privado)
Returns:
El objeto recién creado
Throws:
ReflectionException - si no se puede obtener la instancia del objeto

allMethods

public static java.lang.reflect.Method[] allMethods(java.lang.Class<?> type)
Obtiene un array con la DEFINICION de todos los metodos de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getMethods() devuelve solo metodos PUBLICOS class.getDeclaredMethods() devuelve metodos publicos y privados declarados en la propia clase (ignora la herencia)

Parameters:
type - La definicion de la clase
Returns:
un array de objetos Method con la definicion de los metodos

staticMethod

public static java.lang.reflect.Method staticMethod(java.lang.Class<?> type,
                                                    java.lang.String methodName,
                                                    java.lang.Class<?>... argsTypes)
Devuelve un metodo ESTATICO de una clase

Parameters:
type - La definición de la clase que contiene el metodo estatico
methodName - nombre del metodo
argsTypes - tipos de los argumentos del metodo
Throws:
ReflectionException - si ocurre algun error

method

public static java.lang.reflect.Method method(java.lang.Class<?> type,
                                              java.lang.String methodName,
                                              java.lang.Class<?>... paramTypes)
Busca el metodo que se pasa como parameto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getMethods() devuelve solo metodos PUBLICOS class.getDeclaredMethods() devuelve metodos publicos y privados declarados

Parameters:
type - el tipo
methodName - El nombre del metodo
paramTypes - Los tipos de los parametros
Returns:
El metodo buscado o null si no se encuentra
Throws:
ReflectionException - NoSuchMethodException si no se encuentra el metodo

invokeMethod

public static java.lang.Object invokeMethod(java.lang.Object obj,
                                            java.lang.reflect.Method method,
                                            java.lang.Object... argValues)
Invoca un metodo sobre un objeto

Parameters:
obj - El objeto sobre el que se invoca el metodo (si es null se intenta llamar a un metodo estático)
method - definicion del metodo
argValues - valores para los argumentos
Returns:
El objeto devuelto tras la invocacion del metdo
Throws:
ReflectionException - si ocurre algun error

invokeMethod

public static java.lang.Object invokeMethod(java.lang.Object obj,
                                            java.lang.String methodName,
                                            java.lang.Class<?>[] argsTypes,
                                            java.lang.Object[] argsValues)
Invoca un metodo sobre un objeto

Parameters:
obj - El objeto sobre el que se invoca el metodo (si es null se intenta llamar a un método estático)
methodName - nombre del metodo a invocar
argsTypes - tipos de los argumentos a invocar
argsValues - valores de los argumentos
Returns:
El objeto devuelto tras la invocacion del metodo
Throws:
ReflectionException - si ocurre algun error

invokeStaticMethod

public static java.lang.Object invokeStaticMethod(java.lang.Class<?> type,
                                                  java.lang.String methodName,
                                                  java.lang.Class<?>[] argsTypes,
                                                  java.lang.Object[] argsValues)
Invoca un metodo ESTATICO sobre un objeto

Parameters:
type - La definición de la clase que contiene el metodo estatico
methodName - nombre del metodo a invocar
argsTypes - tipos de los argumentos a invocar
argsValues - valores de los argumentos
Returns:
El objeto devuelto tras la invocacion del metodo
Throws:
ReflectionException - si ocurre algun error

invokeStaticMethod

public static java.lang.Object invokeStaticMethod(java.lang.Class<?> type,
                                                  java.lang.reflect.Method method,
                                                  java.lang.Object... argsValues)
Invoca un metodo ESTATICO sobre un objeto

Parameters:
type - La definición de la clase que contiene el metodo estatico
method - el metodo a invocar
argsValues - valores de los argumentos
Returns:
El objeto devuelto tras la invocacion del metodo
Throws:
ReflectionException - si ocurre algun error

allFieldsMap

public static java.util.Map<java.lang.String,java.lang.reflect.Field> allFieldsMap(java.lang.Class<?> type)
Obtiene un mapa con la DEFINICION de todos los miembros de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getFields() devuelve solo miembros PUBLICOS class.getDeclaredFields() devuelve miembros publicos y privados declarados en la propia clase (ignora la herencia)

Parameters:
type - La definicion de la clase
Returns:
un mapa con objetos Field indexados por su nombre
Throws:
ReflectionException - si hay algún error al obtener el mapa de campos

allFields

public static java.lang.reflect.Field[] allFields(java.lang.Class<?> type)
Obtiene un array con la DEFINICION de todos los miembros de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getFields() devuelve solo miembros PUBLICOS class.getDeclaredFields() devuelve miembros publicos y privados declarados en la propia clase (ignora la herencia)

Parameters:
type - La definicion de la clase
Returns:
un array de objetos Field
Throws:
ReflectionException - si hay algún error al obtener el array de campos

field

public static java.lang.reflect.Field field(java.lang.Class<?> type,
                                            java.lang.String fieldName,
                                            boolean force)
Obtiene la DEFINICION de un miembro de un objeto, recorriendo toda la jerarquia de herencia PROBLEMA: class.getFields() devuelve solo miembros PUBLICOS class.getDeclaredFields() devuelve miembros publicos y privados declarados en la propia clase (ignora la herencia)

Parameters:
type - La definicion de la clase
fieldName - nombre del campo
Returns:
el objeto Field que define el campo
Throws:
ReflectionException - NoSuchFieldException si no se encuentra el field

fieldType

public static java.lang.Class<?> fieldType(java.lang.Class<?> type,
                                           java.lang.String fieldName)
Devuelve el tipo de un campo

Parameters:
type - definición del objeto
fieldName - nombre del campo
Returns:
el tipo del campo
Throws:
ReflectionException - si se produce algún error al acceder al campo

_fieldSetterName

private static java.lang.reflect.Method _fieldSetterName(java.lang.Class<?> type,
                                                         java.lang.String fieldName,
                                                         java.lang.Class<?> memberType)
Obtiene el nombre del metodo setter de un miembro en una clase

Parameters:
type - la clase que contiene el miembro
fieldName - nombre del miembro
memberType - la clase del miembro
Returns:
el nombre del metodo setter

_setFieldValueWithoutUsingAccessors

private static void _setFieldValueWithoutUsingAccessors(java.lang.Class<?> type,
                                                        java.lang.Object obj,
                                                        java.lang.String fieldName,
                                                        java.lang.Object value)
Establece el valor de un miembro SIN utilizar metodos get/set

Parameters:
type - definición del bean
obj - el bean en el que establecer el valor del campo
fieldName - nombre del campo
value - nuevo valor del campo
Throws:
ReflectionException

setStaticFieldValue

public static void setStaticFieldValue(java.lang.Class<?> type,
                                       java.lang.String fieldName,
                                       java.lang.Object value)
Establece el valor de un miembro estatico

Parameters:
type - definición de la clase
fieldName - nombre del campo estatico
value - el nuevo valor del campo
Throws:
ReflectionException - si se produce algún error al establecer el valor del miembro

setFieldValue

public static void setFieldValue(java.lang.Object obj,
                                 java.lang.reflect.Field field,
                                 java.lang.Object value,
                                 boolean useAccessors)
Establece el valor de un miembro

Parameters:
obj - el objeto en el que establecer el valor del miembro
field - el miembro cuyo valor se establece
value - el valor a establecer
useAccessors - true si se utilizan los métodos get/set
Throws:
ReflectionException - si no se puede establecer el valor del miembro

setFieldValue

public static void setFieldValue(java.lang.Object obj,
                                 java.lang.String fieldName,
                                 java.lang.Object value)
Establece el valor de un miembro (field) en un objeto bien accediendo directamente a la variable miembro bien utilizando un accessor set[fieldName]

Parameters:
obj - El objeto
fieldName - El nombre del field
value - El valor del miembro
Throws:
ReflectionException - si se produce alguna excepción en el proceso

setFieldValue

public static void setFieldValue(java.lang.Object obj,
                                 java.lang.String fieldName,
                                 java.lang.Object value,
                                 boolean useAccessor)
Establece el valor de un miembro (field) en un objeto bien accediendo directamente a la variable miembro bien utilizando un accessor set[fieldName]

Parameters:
obj - El objeto
fieldName - El nombre del field
value - El valor del miembro
useAccessor - Si hay que utilizar el metodo set[fieldName]
Throws:
ReflectionException - si se produce alguna excepción en el proceso

_fieldGetterName

public static java.lang.reflect.Method _fieldGetterName(java.lang.Class<?> type,
                                                        java.lang.String fieldName,
                                                        java.lang.Class<?> memberType)
Obtiene el nombre del metodo getter de un miembro en una clase

Parameters:
type - la clase que contiene el miembro
fieldName - nombre del miembro
memberType - la clase del miembro
Returns:
el nombre del metodo getter

_getFieldValueWithoutUsingAccessors

private static <T> T _getFieldValueWithoutUsingAccessors(java.lang.Class<?> type,
                                                         java.lang.Object obj,
                                                         java.lang.String fieldName)
Devuelve el valor de un miembro SIN utilizar metodos get/set

Parameters:
type - definición del bean
obj - el bean del que devolver el valor del campo
fieldName - nombre del campo
Throws:
ReflectionException - si se produce alguna excepción en el proceso

getStaticFieldValue

public static <T> T getStaticFieldValue(java.lang.Class<?> type,
                                        java.lang.String fieldName)
Devuelve el valor de un miembro estatico

Parameters:
type - definicion de la clase
fieldName - nombre del campo
Returns:
el valor del miembro estático
Throws:
ReflectionException - si se produce alguna excepción en el proceso

fieldValue

public static <T> T fieldValue(java.lang.Object obj,
                               java.lang.reflect.Field field,
                               boolean useAccessor)
Devuelve el valor de un miembro de una clase

Parameters:
obj - el objeto cuyo miembro hay que devolver
field - el miembro cuyo valor hay que devolver
useAccessor - true si se utilizan metodos get/set
Returns:
el valor del miembro
Throws:
ReflectionException - si no se puede devolver el valor del miembro

fieldValue

public static <T> T fieldValue(java.lang.Object obj,
                               java.lang.String fieldName,
                               boolean useAccessor)
Devuelve el valor de un miembro de una clase

Parameters:
obj - el objeto cuyo miembro hay que devolver
_field - el miembro cuyo valor hay que devolver
useAccessor - true si se utilizan metodos get/set
Returns:
el valor del miembro
Throws:
ReflectionException - si no se puede devolver el valor del miembro

fieldValue

public static <T> T fieldValue(java.lang.Object obj,
                               java.lang.String fieldName,
                               java.lang.Class<?> fieldType,
                               boolean useAccessor)
Obtiene el valor de un miembro en un objeto, bien accediendo directamente al miembro o bien utilizando un accessor (get[fieldName])

Parameters:
obj - El objeto
fieldName - El nombre del miembro
useAccessor - Si hay que utilizar accessors
Returns:
El valor del miembro
Throws:
ReflectionException - si se produce alguna excepción en el proceso

fieldsAnnotated

public static java.util.Map<java.lang.Class<? extends java.lang.annotation.Annotation>,ReflectionUtils.FieldAnnotated<? extends java.lang.annotation.Annotation>[]> fieldsAnnotated(java.lang.Class<?> annotationType)
Obtiene todos los fields de una clase relacionados con su anotacion

Parameters:
type - el tipo
Returns:
un mapa de campos anotados indexados por la anotación

fieldsAnnotated

public static <A extends java.lang.annotation.Annotation> ReflectionUtils.FieldAnnotated<A>[] fieldsAnnotated(java.lang.Class<?> type,
                                                                                                              java.lang.Class<A> annotationType)
Devuelve los fields de una clase anotados con una determinada notacion

Parameters:
type - el tipo de la clase
annotationType - el tipo de notacion
Returns:
un array de objetos ReflectionUtils.FieldAnnotated que encapsulan en Field y la anotación

classOfType

public static java.lang.Class<?> classOfType(java.lang.reflect.Type type)
Obtiene la clase subyacente de un tipo

Parameters:
type - el tipo
Returns:
la clase subyacente al tipo

collectionFieldComponentType

public static java.lang.Class<?> collectionFieldComponentType(java.lang.reflect.Field field)
Devuelve el tipo de elementos de una colección Collection o un array parametrizado (Collection) NOTA: Debido al type erasure de los genericos en java el tipo de un List SOLO se puede obtener si se trata de un field de una clase (miembro), pero NO si se trata de una variable dentro del flujo

Parameters:
field - el miembro de una clase
Returns:
el tipo

mapFieldKeyValueComponentTypes

public static java.lang.Class<?>[] mapFieldKeyValueComponentTypes(java.lang.reflect.Field field)
Devuelve el tipo de elementos la clave y valor de un Mapa Map parametrizado (Map) NOTA: Debido al type erasure de los genericos en java el tipo de un List SOLO se puede obtener si se trata de un field de una clase (miembro), pero NO si se trata de una variable dentro del flujo

Parameters:
field - el miembro de una clase
Returns:
un array de dos posiciones: 0=tipo de la clave, 1=tipo del value

setAccessibleIgnoringExceptions

public static void setAccessibleIgnoringExceptions(java.lang.reflect.AccessibleObject o,
                                                   boolean accessible)
Establece el flag accessible en el AccessibleObject ignorando excepciones

Parameters:
o - the given AccessibleObject.
accesible - el valor del flag

makeAccessible

public static void makeAccessible(java.lang.reflect.AccessibleObject o)
Establece el flag accessible en el AccessibleObject

Parameters:
o - el objeto AccessibleObject.
Throws:
java.lang.SecurityException - si no se puede establecer el flag

setAccessible

public static void setAccessible(java.lang.reflect.AccessibleObject o,
                                 boolean accessible)
Sets the accessible flag of the given AccessibleObject to the given boolean value.

Parameters:
o - the given AccessibleObject.
accessible - the value to set the accessible flag to.
Throws:
java.lang.SecurityException - if the request is denied.

setFieldValueUsingPath

public static void setFieldValueUsingPath(java.lang.Object obj,
                                          java.lang.String memberPath,
                                          java.lang.Object memberValue,
                                          boolean useAccesors)
Funcion que se encarga de establecer el valor de un miembro en una jerarquía de objetos El path al miembro se pasa como parametro en la variable memberPath que tiene la siguiente estructura: obj.member.member.member... NOTAS: - Se comprueba si algún miembro de la cadena está creado o no, en cuyo caso se crea - NO se contemplan arrays o listas...

Parameters:
obj -
memberPath -
memberValue - el valor del miembro final del path
useAccesors - si hay que utilizar métodos get/set
Throws:
ReflectionException - Si se da alguna excepcion al acceder al miembro
InvocationTargetException
java.lang.IllegalAccessException
java.lang.NoSuchMethodException
java.lang.NoSuchFieldException - Si el miembro solicitado en el path no existe

getMemberValueUsingPath

public static java.lang.Object getMemberValueUsingPath(java.lang.Object obj,
                                                       java.lang.String memberPath,
                                                       boolean useAccesors)
Funcion que se encarga de obtener un valor de una jerarquia de objetos El path al miembro se pasa como parametro en la variable memberPath que tiene la siguiente estructura: obj.member.member.member... Casos especiales: - Si un miembro de la jerarquia es un array o lista, la nomenclatura es: obj.member.member[2].member.... (entre corchetes va el índice en el array o lista) - Si un miembro de la jerarquía es un mapa, la nomenclatura es: obj.member.member(oid).member...(entre corchetes va una CADENA con la clave en el mapa) (obviamente, se restringe a mapas indexados por strings)

Parameters:
obj - El objeto en el cual se ha de obtener el miembro
memberPath - El path del miembro ej: member.innnerMember.member...
useAccesors - si hay que utilizar métodos de acceso al usuario
Returns:
El objeto solicitado
Throws:
ReflectionException - Si se da alguna excepcion al acceder al miembro; ArrayIndexOutOfBoundsException Si un miembro del path es un array y el indice solicitado se sale de los límites IllegalAccessException Si no se puede acceder a un miembro especificado en el path NoSuchFieldException Si el miembro solicitado en el path no existe NumberFormatException Si el formato para un índice en un array o lista no es valido

_parsePathElem

private static java.lang.String[] _parsePathElem(java.lang.String pathElem)
Obtiene el nombre del miembro y el index o clave en el caso de que elemento del path sea una referencia a array, lista o mapa

Parameters:
pathElem - El elemento del path
Returns:
Un array de dos posiciones con Strings - En la primera posición va el nombre del miembro - En la segunda posición va el indice o clave si lo hay o null si no hay indice o clave

composeMethodSignature

public static java.lang.String composeMethodSignature(java.lang.String className,
                                                      java.lang.String methodName,
                                                      java.lang.Class<?>[] paramTypes)
Compone la signatura de un metodo: clase.metodo(params..)

Parameters:
className - El nombre de la clase
methodName - El nombre del metodos
paramTypes - La definicion de los tipos de los argumentos
Returns:
La signatura del metodo: clase.metodo(params)

composeMethodSignature

public static java.lang.String composeMethodSignature(java.lang.reflect.Method m)
Compone la signatura de un metodo: clase.metodo(params..)

Parameters:
m - La definicion del metodo
Returns:
La signatura del metodo: clase.metodo(params...)

composeClassMethodsSignatures

public static java.lang.String composeClassMethodsSignatures(java.lang.Class<?> type)
Imprime información de debug sobre los metodos de una clase

Parameters:
type - La definicion de la clase
Returns:
una cadena con informacion de debug con la signatura de todos los metodos de la clase