Class GenericsUtil

java.lang.Object
org.apache.camel.maven.packaging.generics.GenericsUtil

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

    • 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(Type[] types)
    • 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
    • resolveSetterType

      public static Type resolveSetterType(Class<?> subclass, Method method)
      Resolves the actual type of the specified field 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, Type actualType, Collection<TypeVariable<?>> seen)
    • resolveTypes

      public static Type[] resolveTypes(Type[] types, Type actualType, Collection<TypeVariable<?>> seen)
    • resolveTypes

      public static Type[] resolveTypes(Type[] types, Type actualType)
    • 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 TypeLiteralinvalid input: '<'Foo>() {}.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)
    • getParameterizedType

      public static ParameterizedType getParameterizedType(Type type)
    • getRawType

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