Class TypeFactory

java.lang.Object
io.leangen.geantyref.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 (wouter@coekaerts.be)
  • Constructor Details

    • TypeFactory

      public TypeFactory()
  • Method Details

    • 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.
    • annotatedClass

      public static AnnotatedType annotatedClass(Class<?> clazz, Annotation[] annotations)
    • parameterizedAnnotatedClass

      public static AnnotatedType parameterizedAnnotatedClass(Class<?> clazz, Annotation[] annotations, AnnotatedType... arguments)
    • annotatedInnerClass

      public static AnnotatedType annotatedInnerClass(Type owner, Class<?> clazz, Annotation[] annotations)
    • parameterizedAnnotatedInnerClass

      public static AnnotatedType parameterizedAnnotatedInnerClass(Type owner, Class<?> clazz, Annotation[] annotations, AnnotatedType... arguments)
    • parameterizedAnnotatedInnerClass

      public static AnnotatedType parameterizedAnnotatedInnerClass(AnnotatedType owner, Class<?> clazz, Annotation[] annotations, AnnotatedType... arguments)
    • parameterizedAnnotatedType

      public static AnnotatedParameterizedType parameterizedAnnotatedType(ParameterizedType type, Annotation[] typeAnnotations, Annotation[]... argumentAnnotations)
    • 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.
    • arrayOf

      public static AnnotatedArrayType arrayOf(AnnotatedType componentType, Annotation[] annotations)
      Creates an AnnotatedArrayType wrapped around an array types created by arrayOf(Type)
      Parameters:
      componentType - The type of the components of the array.
      annotations - The annotations to be added to the array type itself.
      Returns:
      An array type.
    • annotation

      public static <A extends Annotation> A annotation(Class<A> annotationType, Map<String,Object> values) throws AnnotationFormatException
      Creates an instance of an annotation.
      Type Parameters:
      A - The type of the annotation.
      Parameters:
      annotationType - The Class representing the type of the annotation to be created.
      values - A map of values to be assigned to the annotation elements.
      Returns:
      An Annotation instanceof matching annotationType
      Throws:
      AnnotationFormatException - Thrown if incomplete or invalid values are provided