Class GenericsUtil


  • public final class GenericsUtil
    extends Object
    Utility classes for generic type operations.
    • Method Detail

      • satisfiesDependency

        public static boolean satisfiesDependency​(boolean isDelegateOrEvent,
                                                  boolean isProducer,
                                                  Type injectionPointType,
                                                  Type beanType)
      • satisfiesDependencyRaw

        public static boolean satisfiesDependencyRaw​(boolean isDelegateOrEvent,
                                                     boolean isProducer,
                                                     Type injectionPointType,
                                                     Type beanType)
      • isAssignableFrom

        public static boolean isAssignableFrom​(boolean isDelegateOrEvent,
                                               boolean isProducer,
                                               Type requiredType,
                                               Type beanType)
        5.2.3 and 5.2.4
      • containsTypeVariable

        public static boolean containsTypeVariable​(Type type)
        Returns:
        true, if the specified type declaration contains an unresolved type variable.
      • containTypeVariable

        public static boolean containTypeVariable​(Collection<? extends Type> types)
      • containTypeVariable

        public static boolean containTypeVariable​(Type[] types)
      • containsWildcardType

        public static boolean containsWildcardType​(Type type)
        Parameters:
        type - to check
        Returns:
        true if the given type contains a WildcardType false otherwise
      • resolveType

        public static Type resolveType​(Class<?> subclass,
                                       Field field)
        Resolves the actual type of the specified field for the type hierarchy specified by the given subclass
      • resolveReturnType

        public static Type resolveReturnType​(Class<?> subclass,
                                             Method method)
        Resolves the actual return type of the specified method for the type hierarchy specified by the given subclass
      • resolveParameterTypes

        public static Type[] resolveParameterTypes​(Class<?> subclass,
                                                   Constructor<?> constructor)
        Resolves the actual parameter generics of the specified constructor for the type hierarchy specified by the given subclass
      • resolveParameterTypes

        public static Type[] resolveParameterTypes​(Class<?> subclass,
                                                   Method method)
        Resolves the actual parameter generics of the specified method for the type hierarchy specified by the given subclass
      • resolveType

        public static Type resolveType​(Type type,
                                       Class<?> subclass,
                                       Member member)
        Resolves the actual type of the specified type for the type hierarchy specified by the given subclass
      • resolveTypes

        public static Type[] resolveTypes​(Type[] types,
                                          Type actualType)
      • getTypeClosure

        public static Set<Type> getTypeClosure​(Class<?> type)
      • getTypeClosure

        public static Set<Type> getTypeClosure​(Type actualType)
      • getTypeClosure

        public static Set<Type> getTypeClosure​(Type type,
                                               Type actualType)
        Returns the type closure for the specified parameters.

        Example 1:

        Take the following classes:

        public class Foo { private T t; } public class Bar extends Foo { }

        To get the type closure of T in the context of Bar (which is {Number.class, Object.class}), you have to call this method like

        GenericUtil.getTypeClosure(Foo.class.getDeclaredField("t").getType(), Bar.class, Foo.class);

        Example 2:

        Take the following classes:

        public class Foo { private T t; } public class Bar extends Foo { }

        To get the type closure of Bar in the context of Foo (which are besides Object.class the ParameterizedTypes Bar and Foo), you have to call this method like

        GenericUtil.getTypeClosure(Foo.class, new TypeLiteral>() {}.getType(), Bar.class);
        Parameters:
        type - the type to get the closure for
        actualType - the context to bind type variables
        Returns:
        the type closure
      • getDirectTypeClosure

        public static Set<Type> getDirectTypeClosure​(Type type,
                                                     Type actualType)
      • hasTypeParameters

        public static boolean hasTypeParameters​(Type type)
      • getRawType

        public static <T> Class<T> getRawType​(Type type)