Class TypeUtils


  • public class TypeUtils
    extends java.lang.Object
    Utility methods focusing on type inspection, particularly with regard to generics.
    Since:
    3.0
    • Constructor Summary

      Constructors 
      Constructor Description
      TypeUtils()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean containsTypeVariables​(java.lang.reflect.Type type)
      Tests, recursively, whether any of the type parameters associated with type are bound to variables.
      static java.lang.reflect.Type[] getImplicitUpperBounds​(java.lang.reflect.WildcardType wildcardType)
      Gets an array containing the sole value of Object if WildcardType.getUpperBounds() returns an empty array.
      static java.lang.Class<?> getRawType​(java.lang.reflect.Type type, java.lang.reflect.Type assigningType)
      Gets the raw type of a Java type, given its context.
      static java.util.Map<java.lang.reflect.TypeVariable<?>,​java.lang.reflect.Type> getTypeArguments​(java.lang.reflect.ParameterizedType type)
      Gets all the type arguments for this parameterized type including owner hierarchy arguments such as Outer<K, V>.Inner<T>.DeepInner<E> .
      static java.util.Map<java.lang.reflect.TypeVariable<?>,​java.lang.reflect.Type> getTypeArguments​(java.lang.reflect.Type type, java.lang.Class<?> toClass)
      Gets the type arguments of a class/interface based on a subtype.
      static boolean isAssignable​(java.lang.reflect.Type type, java.lang.reflect.Type toType)
      Tests if the subject type may be implicitly cast to the target type following the Java generics rules.
      static java.lang.reflect.ParameterizedType parameterize​(java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)
      Creates a parameterized type instance.
      static java.lang.reflect.Type unrollVariables​(java.util.Map<java.lang.reflect.TypeVariable<?>,​java.lang.reflect.Type> typeArguments, java.lang.reflect.Type type)
      Gets a type representing type with variable assignments "unrolled."
      static TypeUtils.WildcardTypeBuilder wildcardType()
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • TypeUtils

        public TypeUtils()
    • Method Detail

      • containsTypeVariables

        public static boolean containsTypeVariables​(java.lang.reflect.Type type)
        Tests, recursively, whether any of the type parameters associated with type are bound to variables.
        Parameters:
        type - the type to check for type variables
        Returns:
        boolean
        Since:
        3.2
      • getImplicitUpperBounds

        public static java.lang.reflect.Type[] getImplicitUpperBounds​(java.lang.reflect.WildcardType wildcardType)
        Gets an array containing the sole value of Object if WildcardType.getUpperBounds() returns an empty array. Otherwise, it returns the result of WildcardType.getUpperBounds() passed into normalizeUpperBounds(java.lang.reflect.Type[]).
        Parameters:
        wildcardType - the subject wildcard type, not null
        Returns:
        a non-empty array containing the upper bounds of the wildcard type.
      • getRawType

        public static java.lang.Class<?> getRawType​(java.lang.reflect.Type type,
                                                    java.lang.reflect.Type assigningType)
        Gets the raw type of a Java type, given its context. Primarily for use with TypeVariables and GenericArrayTypes, or when you do not know the runtime type of type: if you know you have a Class instance, it is already raw; if you know you have a ParameterizedType, its raw type is only a method call away.
        Parameters:
        type - to resolve
        assigningType - type to be resolved against
        Returns:
        the resolved Class object or null if the type could not be resolved
      • getTypeArguments

        public static java.util.Map<java.lang.reflect.TypeVariable<?>,​java.lang.reflect.Type> getTypeArguments​(java.lang.reflect.ParameterizedType type)
        Gets all the type arguments for this parameterized type including owner hierarchy arguments such as Outer<K, V>.Inner<T>.DeepInner<E> . The arguments are returned in a Map specifying the argument type for each TypeVariable.
        Parameters:
        type - specifies the subject parameterized type from which to harvest the parameters.
        Returns:
        a Map of the type arguments to their respective type variables.
      • getTypeArguments

        public static java.util.Map<java.lang.reflect.TypeVariable<?>,​java.lang.reflect.Type> getTypeArguments​(java.lang.reflect.Type type,
                                                                                                                     java.lang.Class<?> toClass)
        Gets the type arguments of a class/interface based on a subtype. For instance, this method will determine that both of the parameters for the interface Map are Object for the subtype Properties even though the subtype does not directly implement the Map interface.

        This method returns null if type is not assignable to toClass. It returns an empty map if none of the classes or interfaces in its inheritance hierarchy specify any type arguments.

        A side effect of this method is that it also retrieves the type arguments for the classes and interfaces that are part of the hierarchy between type and toClass. So with the above example, this method will also determine that the type arguments for Hashtable are also both Object. In cases where the interface specified by toClass is (indirectly) implemented more than once (e.g. where toClass specifies the interface Iterable and type specifies a parameterized type that implements both Set and Collection), this method will look at the inheritance hierarchy of only one of the implementations/subclasses; the first interface encountered that isn't a subinterface to one of the others in the type to toClass hierarchy.

        Parameters:
        type - the type from which to determine the type parameters of toClass
        toClass - the class whose type parameters are to be determined based on the subtype type
        Returns:
        a Map of the type assignments for the type variables in each type in the inheritance hierarchy from type to toClass inclusive.
      • isAssignable

        public static boolean isAssignable​(java.lang.reflect.Type type,
                                           java.lang.reflect.Type toType)
        Tests if the subject type may be implicitly cast to the target type following the Java generics rules. If both types are Class objects, the method returns the result of ClassUtils.isAssignable(Class, Class).
        Parameters:
        type - the subject type to be assigned to the target type
        toType - the target type
        Returns:
        true if type is assignable to toType.
      • parameterize

        public static final java.lang.reflect.ParameterizedType parameterize​(java.lang.Class<?> rawClass,
                                                                             java.lang.reflect.Type... typeArguments)
        Creates a parameterized type instance.
        Parameters:
        rawClass - the raw class to create a parameterized type instance for
        typeArguments - the types used for parameterization
        Returns:
        ParameterizedType
        Since:
        3.2
      • unrollVariables

        public static java.lang.reflect.Type unrollVariables​(java.util.Map<java.lang.reflect.TypeVariable<?>,​java.lang.reflect.Type> typeArguments,
                                                             java.lang.reflect.Type type)
        Gets a type representing type with variable assignments "unrolled."
        Parameters:
        typeArguments - as from getTypeArguments(Type, Class)
        type - the type to unroll variable assignments for
        Returns:
        Type
        Since:
        3.2