private BoundedType boundsOf(WildcardType wildCard) {
        /*
         *  According to JLS(http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.5.1):
         *  - Lower and upper can't coexist: (for instance, this is not allowed:
         *    <? extends List<String> & super MyInterface>)
         *  - Multiple concrete type bounds are not supported (for instance, this is not allowed:
         *    <? extends ArrayList<String> & MyInterface>)
         *    But the following form is possible where there is a single concrete tyep bound followed by interface type bounds
         *    <T extends List<String> & Comparable>
         */

        WildCardBoundedType wildCardBoundedType = new WildCardBoundedType(wildCard);
        if (wildCardBoundedType.firstBound() instanceof TypeVariable) {
            return boundsOf((TypeVariable<?>) wildCardBoundedType.firstBound());
        }

        return wildCardBoundedType;
    }
private BoundedType boundsOf ( WildcardType wildCard ) { WildCardBoundedType wildCardBoundedType = new WildCardBoundedType ( wildCard ) ; if ( wildCardBoundedType . firstBound ( ) instanceof TypeVariable ) { return boundsOf ( ( TypeVariable < ? > ) wildCardBoundedType . firstBound ( ) ) ; } return wildCardBoundedType ; }
@param wildCard The WildCard type
@return A {@link BoundedType} for easy bound information, if first bound is a TypeVariable
then retrieve BoundedType of this TypeVariable