base/common/src/main/com/thesett/common/util/ReflectionUtils.java
public static Set<Class> findMatchingSetters(Class obClass, String propertyName)
    {
        /*log.fine("private Set<Class> findMatchingSetters(Object ob, String propertyName): called");*/
        Set<Class> types = new HashSet<Class>();

        // Convert the first letter of the property name to upper case to match against the upper case version of
        // it that will be in the setter method name. For example the property test will have a setter method called
        // setTest.
        String upperPropertyName = Character.toUpperCase(propertyName.charAt(0)) + propertyName.substring(1);

        // Scan through all the objects methods.
        Method[] methods = obClass.getMethods();

        for (Method nextMethod : methods)
        {
            // Get the next method.
            /*log.fine("nextMethod = " + nextMethod.getName());*/
            // Check if a method has the correct name, accessibility and the correct number of arguments to be a setter
            // method for the property.
            String methodName = nextMethod.getName();

            if (methodName.equals("set" + upperPropertyName) && Modifier.isPublic(nextMethod.getModifiers()) &&
                    (nextMethod.getParameterTypes().length == 1))
            {
                /*log.fine(methodName + " is a valid setter method for the property " + propertyName +
                        " with argument of type " + nextMethod.getParameterTypes()[0]);*/

                // Add its argument type to the array of setter types.
                types.add(nextMethod.getParameterTypes()[0]);
            }
        }

        return types;
    }
public static Set<Class> findMatchingSetters(Class obClass, String propertyName)
    {
        /*log.fine("private Set<Class> findMatchingSetters(Object ob, String propertyName): called");*/
        Set<Class> types = new HashSet<Class>();

        // Convert the first letter of the property name to upper case to match against the upper case version of
        // it that will be in the setter method name. For example the property test will have a setter method called
        // setTest.
        String upperPropertyName = Character.toUpperCase(propertyName.charAt(0)) + propertyName.substring(1);

        // Scan through all the objects methods.
        Method[] methods = obClass.getMethods();

        for (Method nextMethod : methods)
        {
            // Get the next method.
            /*log.fine("nextMethod = " + nextMethod.getName());*/
            // Check if a method has the correct name, accessibility and the correct number of arguments to be a setter
            // method for the property.
            String methodName = nextMethod.getName();

            if (methodName.equals("set" + upperPropertyName) && Modifier.isPublic(nextMethod.getModifiers()) &&
                    (nextMethod.getParameterTypes().length == 1))
            {
                /*log.fine(methodName + " is a valid setter method for the property " + propertyName +
                        " with argument of type " + nextMethod.getParameterTypes()[0]);*/

                // Add its argument type to the array of setter types.
                types.add(nextMethod.getParameterTypes()[0]);
            }
        }

        return types;
    }
public static Set < Class > findMatchingSetters ( Class obClass , String propertyName ) { /*log.fine("private Set<Class> findMatchingSetters(Object ob, String propertyName): called");*/ Set < Class > types = new HashSet < Class > ( ) ; // Convert the first letter of the property name to upper case to match against the upper case version of // it that will be in the setter method name. For example the property test will have a setter method called // setTest. String upperPropertyName = Character . toUpperCase ( propertyName . charAt ( 0 ) ) + propertyName . substring ( 1 ) ; // Scan through all the objects methods. Method [ ] methods = obClass . getMethods ( ) ; for ( Method nextMethod : methods ) { // Get the next method. /*log.fine("nextMethod = " + nextMethod.getName());*/ // Check if a method has the correct name, accessibility and the correct number of arguments to be a setter // method for the property. String methodName = nextMethod . getName ( ) ; if ( methodName . equals ( "set" + upperPropertyName ) && Modifier . isPublic ( nextMethod . getModifiers ( ) ) && ( nextMethod . getParameterTypes ( ) . length == 1 ) ) { /*log.fine(methodName + " is a valid setter method for the property " + propertyName +
                        " with argument of type " + nextMethod.getParameterTypes()[0]);*/ // Add its argument type to the array of setter types. types . add ( nextMethod . getParameterTypes ( ) [ 0 ] ) ; } } return types ; }
Finds the argument types of all setter methods on a bean for a given property name. For a method to be a setter
method it must have a void return type, be public and accept only a single argument. Its name must be 'set'
followed by the property name.

@param  obClass      The class to find all setter methods matching a given property for.
@param  propertyName The property name to find all matching setter methods for.

@return An array of the types (as classes) of all the possible types that the setter method can be called with.
Finds the argument types of all setter methods on a bean for a given property name . For a method to be a setter method it must have a void return type be public and accept only a single argument . Its name must be set followed by the property name .