- java.lang.Object
-
- io.leangen.geantyref.TypeFactory
-
public class TypeFactory extends java.lang.ObjectUtility class for creating instances ofType. These types can be used with theGenericTypeReflectoror anything else handling Java types.
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.reflect.WildcardTypeUNBOUND_WILDCARD
-
Constructor Summary
Constructors Constructor Description TypeFactory()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.reflect.AnnotatedTypeannotatedClass(java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations)static java.lang.reflect.AnnotatedTypeannotatedInnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations)static <A extends java.lang.annotation.Annotation>
Aannotation(java.lang.Class<A> annotationType, java.util.Map<java.lang.String,java.lang.Object> values)Creates an instance of an annotation.static java.lang.reflect.AnnotatedArrayTypearrayOf(java.lang.reflect.AnnotatedType componentType, java.lang.annotation.Annotation[] annotations)Creates anAnnotatedArrayTypewrapped around an array types created byarrayOf(Type)static java.lang.reflect.TypearrayOf(java.lang.reflect.Type componentType)Creates a array type.private static voidcheckParametersWithinBound(java.lang.reflect.ParameterizedType type)Check if the type arguments of the given type are within the bounds declared on the type parameters.private static booleancouldHaveCommonSubtype(java.lang.reflect.Type type1, java.lang.reflect.Type type2)Checks if the intersection of two types is not empty.static java.lang.reflect.TypeinnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz)Creates a type ofclazznested inowner.static java.lang.reflect.AnnotatedTypeparameterizedAnnotatedClass(java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations, java.lang.reflect.AnnotatedType... arguments)static java.lang.reflect.AnnotatedTypeparameterizedAnnotatedInnerClass(java.lang.reflect.AnnotatedType owner, java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations, java.lang.reflect.AnnotatedType... arguments)static java.lang.reflect.AnnotatedTypeparameterizedAnnotatedInnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations, java.lang.reflect.AnnotatedType... arguments)static java.lang.reflect.AnnotatedParameterizedTypeparameterizedAnnotatedType(java.lang.reflect.ParameterizedType type, java.lang.annotation.Annotation[] typeAnnotations, java.lang.annotation.Annotation[]... argumentAnnotations)static java.lang.reflect.TypeparameterizedClass(java.lang.Class<?> clazz, java.lang.reflect.Type... arguments)Creates a type of classclazzwithargumentsas type arguments.static java.lang.reflect.TypeparameterizedInnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz, java.lang.reflect.Type... arguments)Creates a type ofclazzwithargumentsas type arguments, nested inowner.private static java.lang.reflect.TypetransformOwner(java.lang.reflect.Type givenOwner, java.lang.Class<?> clazz)Transforms the given owner type into an appropriate one when constructing a parameterized type.static java.lang.reflect.WildcardTypeunboundWildcard()Returns the wildcard type without bounds.static java.lang.reflect.WildcardTypewildcardExtends(java.lang.reflect.Type upperBound)Creates a wildcard type with an upper bound.static java.lang.reflect.WildcardTypewildcardSuper(java.lang.reflect.Type lowerBound)Creates a wildcard type with a lower bound.
-
-
-
Method Detail
-
parameterizedClass
public static java.lang.reflect.Type parameterizedClass(java.lang.Class<?> clazz, java.lang.reflect.Type... arguments)Creates a type of classclazzwithargumentsas type arguments.For example:
parameterizedClass(Map.class, Integer.class, String.class)returns the typeMap<Integer, String>.- Parameters:
clazz- Type class of the type to createarguments- Type arguments for the variables ofclazz, or null if these are not known.- Returns:
- A
ParameterizedType, or simplyclazzifargumentsisnullor empty.
-
annotatedClass
public static java.lang.reflect.AnnotatedType annotatedClass(java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations)
-
parameterizedAnnotatedClass
public static java.lang.reflect.AnnotatedType parameterizedAnnotatedClass(java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations, java.lang.reflect.AnnotatedType... arguments)
-
annotatedInnerClass
public static java.lang.reflect.AnnotatedType annotatedInnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations)
-
parameterizedAnnotatedInnerClass
public static java.lang.reflect.AnnotatedType parameterizedAnnotatedInnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations, java.lang.reflect.AnnotatedType... arguments)
-
parameterizedAnnotatedInnerClass
public static java.lang.reflect.AnnotatedType parameterizedAnnotatedInnerClass(java.lang.reflect.AnnotatedType owner, java.lang.Class<?> clazz, java.lang.annotation.Annotation[] annotations, java.lang.reflect.AnnotatedType... arguments)
-
parameterizedAnnotatedType
public static java.lang.reflect.AnnotatedParameterizedType parameterizedAnnotatedType(java.lang.reflect.ParameterizedType type, java.lang.annotation.Annotation[] typeAnnotations, java.lang.annotation.Annotation[]... argumentAnnotations)
-
innerClass
public static java.lang.reflect.Type innerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz)Creates a type ofclazznested inowner.- Parameters:
owner- The owner type. This should be a subtype ofclazz.getDeclaringClass(), ornullif no owner is known.clazz- Type class of the type to create- Returns:
- A
ParameterizedTypeif the class declaringclazzis generic and its type parameters are known inownerandclazzitself has no type parameters. Otherwise, just returnsclazz.
-
parameterizedInnerClass
public static java.lang.reflect.Type parameterizedInnerClass(java.lang.reflect.Type owner, java.lang.Class<?> clazz, java.lang.reflect.Type... arguments)Creates a type ofclazzwithargumentsas type arguments, nested inowner.In the ideal case, this returns a
ParameterizedTypewith 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 rawclazz. Note that types with some parameters specified and others not, don't exist in Java.If the caller does not know the exact
ownertype orarguments,nullshould be given (orparameterizedClass(Class, Type...)orinnerClass(Type, Class)could be used). If they are not needed (non-generic owner and/orclazzhas no type parameters), they will be filled in automatically. If they are needed but are not given, the rawclazzis returned.The specified
ownermay be any subtype ofclazz.getDeclaringClass(). It is automatically converted into the right parameterized version of the declaring class. Ifclazzis astatic(nested) class, the owner is not used.- Parameters:
owner- The owner type. This should be a subtype ofclazz.getDeclaringClass(), ornullif no owner is known.clazz- Type class of the type to createarguments- Type arguments for the variables ofclazz, or null if these are not known.- Returns:
- A
ParameterizedTypeifclazzor the class declaringclazzis generic, and all the needed type arguments are specified inownerandarguments. Otherwise, just returnsclazz. - Throws:
java.lang.IllegalArgumentException- ifarguments(is non-null and) has an incorrect length, or if one of theargumentsis not within the bounds declared on the matching type variable, or if owner is non-null butclazzhas no declaring class (e.g. is a top-level class), or if owner is not a a subtype ofclazz.getDeclaringClass().java.lang.NullPointerException- ifclazzor one of the elements inargumentsis null.
-
checkParametersWithinBound
private static void checkParametersWithinBound(java.lang.reflect.ParameterizedType type)
Check if the type arguments of the given type are within the bounds declared on the type parameters. Only the type arguments of the type itself are checked, the possible owner type is assumed to be valid.It does not follow the checks defined in the JLS because there are several problems with those (see http://stackoverflow.com/questions/7003009 for one). Instead, this applies some intuition and follows what Java compilers seem to do.
- Parameters:
type- possibly inconsistent type to check.- Throws:
java.lang.IllegalArgumentException- if the type arguments are not within the bounds
-
couldHaveCommonSubtype
private static boolean couldHaveCommonSubtype(java.lang.reflect.Type type1, java.lang.reflect.Type type2)Checks if the intersection of two types is not empty.
-
transformOwner
private static java.lang.reflect.Type transformOwner(java.lang.reflect.Type givenOwner, java.lang.Class<?> clazz)Transforms the given owner type into an appropriate one when constructing a parameterized type.
-
unboundWildcard
public static java.lang.reflect.WildcardType unboundWildcard()
Returns the wildcard type without bounds. This is the '?' in for exampleList<?>.- Returns:
- The unbound wildcard type
-
wildcardExtends
public static java.lang.reflect.WildcardType wildcardExtends(java.lang.reflect.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 java.lang.reflect.WildcardType wildcardSuper(java.lang.reflect.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 java.lang.reflect.Type arrayOf(java.lang.reflect.Type componentType)
Creates a array type.If
componentTypeis not a generic type but aClassobject, this returns theClassrepresenting the non-generic array type. Otherwise, returns aGenericArrayType.For example:
arrayOf(String.class)returnsString[].classarrayOf(parameterizedClass(List.class, String.class))returns theGenericArrayTypeforList<String>[]
- Parameters:
componentType- The type of the components of the array.- Returns:
- An array type.
-
arrayOf
public static java.lang.reflect.AnnotatedArrayType arrayOf(java.lang.reflect.AnnotatedType componentType, java.lang.annotation.Annotation[] annotations)Creates anAnnotatedArrayTypewrapped around an array types created byarrayOf(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 java.lang.annotation.Annotation> A annotation(java.lang.Class<A> annotationType, java.util.Map<java.lang.String,java.lang.Object> values) throws AnnotationFormatExceptionCreates an instance of an annotation.- Type Parameters:
A- The type of the annotation.- Parameters:
annotationType- TheClassrepresenting the type of the annotation to be created.values- A map of values to be assigned to the annotation elements.- Returns:
- An
Annotationinstanceof matchingannotationType - Throws:
AnnotationFormatException- Thrown if incomplete or invalidvaluesare provided
-
-