Class TypeFactory


  • public class TypeFactory
    extends Object
    Utility class for creating instances of Type. These types can be used with the GenericTypeReflector or anything else handling Java types.
    Author:
    Wouter Coekaerts
    • Method Detail

      • parameterizedClass

        public static Type parameterizedClass​(Class<?> clazz,
                                              Type... arguments)
        Creates a type of class clazz with arguments as type arguments.

        For example: parameterizedClass(Map.class, Integer.class, String.class) returns the type Map<Integer, String>.

        Parameters:
        clazz - Type class of the type to create
        arguments - Type arguments for the variables of clazz, or null if these are not known.
        Returns:
        A ParameterizedType, or simply clazz if arguments is null or empty.
      • innerClass

        public static Type innerClass​(Type owner,
                                      Class<?> clazz)
        Creates a type of clazz nested in owner.
        Parameters:
        owner - The owner type. This should be a subtype of clazz.getDeclaringClass(), or null if no owner is known.
        clazz - Type class of the type to create
        Returns:
        A ParameterizedType if the class declaring clazz is generic and its type parameters are known in owner and clazz itself has no type parameters. Otherwise, just returns clazz.
      • parameterizedInnerClass

        public static Type parameterizedInnerClass​(Type owner,
                                                   Class<?> clazz,
                                                   Type... arguments)
        Creates a type of clazz with arguments as type arguments, nested in owner.

        In the ideal case, this returns a ParameterizedType with all generic information in it. If some type arguments are missing or if the resulting type simply doesn't need any type parameters, it returns the raw clazz. Note that types with some parameters specified and others not, don't exist in Java.

        If the caller does not know the exact owner type or arguments, null should be given (or parameterizedClass(Class, Type...) or innerClass(Type, Class) could be used). If they are not needed (non-generic owner and/or clazz has no type parameters), they will be filled in automatically. If they are needed but are not given, the raw clazz is returned.

        The specified owner may be any subtype of clazz.getDeclaringClass(). It is automatically converted into the right parameterized version of the declaring class. If clazz is a static (nested) class, the owner is not used.

        Parameters:
        owner - The owner type. This should be a subtype of clazz.getDeclaringClass(), or null if no owner is known.
        clazz - Type class of the type to create
        arguments - Type arguments for the variables of clazz, or null if these are not known.
        Returns:
        A ParameterizedType if clazz or the class declaring clazz is generic, and all the needed type arguments are specified in owner and arguments. Otherwise, just returns clazz.
        Throws:
        IllegalArgumentException - if arguments (is non-null and) has an incorrect length, or if one of the arguments is not within the bounds declared on the matching type variable, or if owner is non-null but clazz has no declaring class (e.g. is a top-level class), or if owner is not a a subtype of clazz.getDeclaringClass().
        NullPointerException - if clazz or one of the elements in arguments is null.
      • unboundWildcard

        public static WildcardType unboundWildcard()
        Returns the wildcard type without bounds. This is the '?' in for example List<?>.
        Returns:
        The unbound wildcard type
      • wildcardExtends

        public static WildcardType wildcardExtends​(Type upperBound)
        Creates a wildcard type with an upper bound.

        For example wildcardExtends(String.class) returns the type ? extends String.

        Parameters:
        upperBound - Upper bound of the wildcard
        Returns:
        A wildcard type
      • wildcardSuper

        public static WildcardType wildcardSuper​(Type lowerBound)
        Creates a wildcard type with a lower bound.

        For example wildcardSuper(String.class) returns the type ? super String.

        Parameters:
        lowerBound - Lower bound of the wildcard
        Returns:
        A wildcard type
      • arrayOf

        public static Type arrayOf​(Type componentType)
        Creates a array type.

        If componentType is not a generic type but a Class object, this returns the Class representing the non-generic array type. Otherwise, returns a GenericArrayType.

        For example:

        • arrayOf(String.class) returns String[].class
        • arrayOf(parameterizedClass(List.class, String.class)) returns the GenericArrayType for List<String>[]
        Parameters:
        componentType - The type of the components of the array.
        Returns:
        An array type.