Class Reflector


  • public class Reflector
    extends java.lang.Object
    This class represents a cached set of class definition information that allows for easy mapping between property names and getter/setter methods.
    • Constructor Summary

      Constructors 
      Constructor Description
      Reflector​(java.lang.Class<?> clazz)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void addDefaultConstructor​(java.lang.Class<?> clazz)  
      private void addFields​(java.lang.Class<?> clazz)  
      private void addGetField​(java.lang.reflect.Field field)  
      private void addGetMethod​(java.lang.String name, java.lang.reflect.Method method, boolean isAmbiguous)  
      private void addGetMethods​(java.lang.Class<?> clazz)  
      private void addMethodConflict​(java.util.Map<java.lang.String,​java.util.List<java.lang.reflect.Method>> conflictingMethods, java.lang.String name, java.lang.reflect.Method method)  
      private void addSetField​(java.lang.reflect.Field field)  
      private void addSetMethod​(java.lang.String name, java.lang.reflect.Method method)  
      private void addSetMethods​(java.lang.Class<?> clazz)  
      private void addUniqueMethods​(java.util.Map<java.lang.String,​java.lang.reflect.Method> uniqueMethods, java.lang.reflect.Method[] methods)  
      static boolean canControlMemberAccessible()
      Checks whether can control member accessible.
      java.lang.String findPropertyName​(java.lang.String name)  
      private java.lang.reflect.Method[] getClassMethods​(java.lang.Class<?> clazz)
      This method returns an array containing all methods declared in this class and any superclass.
      java.lang.reflect.Constructor<?> getDefaultConstructor()  
      java.lang.String[] getGetablePropertyNames()
      Gets an array of the readable properties for an object.
      Invoker getGetInvoker​(java.lang.String propertyName)  
      java.lang.Class<?> getGetterType​(java.lang.String propertyName)
      Gets the type for a property getter.
      java.lang.String[] getSetablePropertyNames()
      Gets an array of the writable properties for an object.
      Invoker getSetInvoker​(java.lang.String propertyName)  
      java.lang.Class<?> getSetterType​(java.lang.String propertyName)
      Gets the type for a property setter.
      private java.lang.String getSignature​(java.lang.reflect.Method method)  
      java.lang.Class<?> getType()
      Gets the name of the class the instance provides information for.
      boolean hasDefaultConstructor()  
      boolean hasGetter​(java.lang.String propertyName)
      Check to see if a class has a readable property by name.
      boolean hasSetter​(java.lang.String propertyName)
      Check to see if a class has a writable property by name.
      private boolean isValidPropertyName​(java.lang.String name)  
      private java.lang.reflect.Method pickBetterSetter​(java.lang.reflect.Method setter1, java.lang.reflect.Method setter2, java.lang.String property)  
      private void resolveGetterConflicts​(java.util.Map<java.lang.String,​java.util.List<java.lang.reflect.Method>> conflictingGetters)  
      private void resolveSetterConflicts​(java.util.Map<java.lang.String,​java.util.List<java.lang.reflect.Method>> conflictingSetters)  
      private java.lang.Class<?> typeToClass​(java.lang.reflect.Type src)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • type

        private final java.lang.Class<?> type
      • readablePropertyNames

        private final java.lang.String[] readablePropertyNames
      • writablePropertyNames

        private final java.lang.String[] writablePropertyNames
      • setMethods

        private final java.util.Map<java.lang.String,​Invoker> setMethods
      • getMethods

        private final java.util.Map<java.lang.String,​Invoker> getMethods
      • setTypes

        private final java.util.Map<java.lang.String,​java.lang.Class<?>> setTypes
      • getTypes

        private final java.util.Map<java.lang.String,​java.lang.Class<?>> getTypes
      • defaultConstructor

        private java.lang.reflect.Constructor<?> defaultConstructor
      • caseInsensitivePropertyMap

        private java.util.Map<java.lang.String,​java.lang.String> caseInsensitivePropertyMap
    • Constructor Detail

      • Reflector

        public Reflector​(java.lang.Class<?> clazz)
    • Method Detail

      • addDefaultConstructor

        private void addDefaultConstructor​(java.lang.Class<?> clazz)
      • addGetMethods

        private void addGetMethods​(java.lang.Class<?> clazz)
      • resolveGetterConflicts

        private void resolveGetterConflicts​(java.util.Map<java.lang.String,​java.util.List<java.lang.reflect.Method>> conflictingGetters)
      • addGetMethod

        private void addGetMethod​(java.lang.String name,
                                  java.lang.reflect.Method method,
                                  boolean isAmbiguous)
      • addSetMethods

        private void addSetMethods​(java.lang.Class<?> clazz)
      • addMethodConflict

        private void addMethodConflict​(java.util.Map<java.lang.String,​java.util.List<java.lang.reflect.Method>> conflictingMethods,
                                       java.lang.String name,
                                       java.lang.reflect.Method method)
      • resolveSetterConflicts

        private void resolveSetterConflicts​(java.util.Map<java.lang.String,​java.util.List<java.lang.reflect.Method>> conflictingSetters)
      • pickBetterSetter

        private java.lang.reflect.Method pickBetterSetter​(java.lang.reflect.Method setter1,
                                                          java.lang.reflect.Method setter2,
                                                          java.lang.String property)
      • addSetMethod

        private void addSetMethod​(java.lang.String name,
                                  java.lang.reflect.Method method)
      • typeToClass

        private java.lang.Class<?> typeToClass​(java.lang.reflect.Type src)
      • addFields

        private void addFields​(java.lang.Class<?> clazz)
      • addSetField

        private void addSetField​(java.lang.reflect.Field field)
      • addGetField

        private void addGetField​(java.lang.reflect.Field field)
      • isValidPropertyName

        private boolean isValidPropertyName​(java.lang.String name)
      • getClassMethods

        private java.lang.reflect.Method[] getClassMethods​(java.lang.Class<?> clazz)
        This method returns an array containing all methods declared in this class and any superclass. We use this method, instead of the simpler Class.getMethods(), because we want to look for private methods as well.
        Parameters:
        clazz - The class
        Returns:
        An array containing all methods in this class
      • addUniqueMethods

        private void addUniqueMethods​(java.util.Map<java.lang.String,​java.lang.reflect.Method> uniqueMethods,
                                      java.lang.reflect.Method[] methods)
      • getSignature

        private java.lang.String getSignature​(java.lang.reflect.Method method)
      • canControlMemberAccessible

        public static boolean canControlMemberAccessible()
        Checks whether can control member accessible.
        Returns:
        If can control member accessible, it return true
        Since:
        3.5.0
      • getType

        public java.lang.Class<?> getType()
        Gets the name of the class the instance provides information for.
        Returns:
        The class name
      • getDefaultConstructor

        public java.lang.reflect.Constructor<?> getDefaultConstructor()
      • hasDefaultConstructor

        public boolean hasDefaultConstructor()
      • getSetInvoker

        public Invoker getSetInvoker​(java.lang.String propertyName)
      • getGetInvoker

        public Invoker getGetInvoker​(java.lang.String propertyName)
      • getSetterType

        public java.lang.Class<?> getSetterType​(java.lang.String propertyName)
        Gets the type for a property setter.
        Parameters:
        propertyName - - the name of the property
        Returns:
        The Class of the property setter
      • getGetterType

        public java.lang.Class<?> getGetterType​(java.lang.String propertyName)
        Gets the type for a property getter.
        Parameters:
        propertyName - - the name of the property
        Returns:
        The Class of the property getter
      • getGetablePropertyNames

        public java.lang.String[] getGetablePropertyNames()
        Gets an array of the readable properties for an object.
        Returns:
        The array
      • getSetablePropertyNames

        public java.lang.String[] getSetablePropertyNames()
        Gets an array of the writable properties for an object.
        Returns:
        The array
      • hasSetter

        public boolean hasSetter​(java.lang.String propertyName)
        Check to see if a class has a writable property by name.
        Parameters:
        propertyName - - the name of the property to check
        Returns:
        True if the object has a writable property by the name
      • hasGetter

        public boolean hasGetter​(java.lang.String propertyName)
        Check to see if a class has a readable property by name.
        Parameters:
        propertyName - - the name of the property to check
        Returns:
        True if the object has a readable property by the name
      • findPropertyName

        public java.lang.String findPropertyName​(java.lang.String name)