Class Reflections


  • public class Reflections
    extends Object
    Utility class for working with JDK Reflection and also CDI's Annotated metadata.
    Author:
    Stuart Douglas, Pete Muir
    • Field Detail

      • EMPTY_ANNOTATION_ARRAY

        public static final Annotation[] EMPTY_ANNOTATION_ARRAY
        An empty array of type Annotation, useful converting lists to arrays.
      • EMPTY_OBJECT_ARRAY

        public static final Object[] EMPTY_OBJECT_ARRAY
        An empty array of type Object, useful for converting lists to arrays.
      • EMPTY_TYPES

        public static final Type[] EMPTY_TYPES
      • EMPTY_CLASSES

        public static final Class<?>[] EMPTY_CLASSES
    • Method Detail

      • cast

        public static <T> T cast​(Object obj)

        Perform a runtime cast. Similar to Class.cast(Object), but useful when you do not have a Class object for type you wish to cast to.

        Class.cast(Object) should be used if possible

        Type Parameters:
        T - the type to cast to
        Parameters:
        obj - the object to perform the cast on
        Returns:
        the casted object
        Throws:
        ClassCastException - if the type T is not a subtype of the object
        See Also:
        Class.cast(Object)
      • getAllDeclaredMethods

        public static Set<Method> getAllDeclaredMethods​(Class<?> clazz)
        Get all the declared methods on the class hierarchy. This will return overridden methods.
        Parameters:
        clazz - The class to search
        Returns:
        the set of all declared methods or an empty set if there are none
      • invokeMethod

        public static <T> T invokeMethod​(boolean setAccessible,
                                         Method method,
                                         Class<T> expectedReturnType,
                                         Object instance,
                                         Object... args)

        Invoke the method on the instance, with any arguments specified, casting the result of invoking the method to the expected return type.

        This method wraps Method.invoke(Object, Object...), converting the checked exceptions that Method.invoke(Object, Object...) specifies to runtime exceptions.

        If instructed, this method attempts to set the accessible flag of the method in a PrivilegedAction before invoking the method.

        Parameters:
        setAccessible - flag indicating whether method should first be set as accessible
        method - the method to invoke
        instance - the instance to invoke the method
        args - the arguments to the method
        Returns:
        the result of invoking the method, or null if the method's return type is void
        Throws:
        RuntimeException - if this Method object enforces Java language access control and the underlying method is inaccessible or if the underlying method throws an exception or if the initialization provoked by this method fails.
        IllegalArgumentException - if the method is an instance method and the specified instance argument is not an instance of the class or interface declaring the underlying method (or of a subclass or implementor thereof); if the number of actual and formal parameters differ; if an unwrapping conversion for primitive arguments fails; or if, after possible unwrapping, a parameter value cannot be converted to the corresponding formal parameter type by a method invocation conversion.
        NullPointerException - if the specified instance is null and the method is an instance method.
        ClassCastException - if the result of invoking the method cannot be cast to the expectedReturnType
        ExceptionInInitializerError - if the initialization provoked by this method fails.
        See Also:
        Method.invoke(Object, Object...)
      • getFieldValue

        public static <T> T getFieldValue​(Field field,
                                          Object instance,
                                          Class<T> expectedType)

        Get the value of the field, on the specified instance, casting the value of the field to the expected type.

        This method wraps Field.get(Object), converting the checked exceptions that Field.get(Object) specifies to runtime exceptions.

        Type Parameters:
        T - the type of the field's value
        Parameters:
        field - the field to operate on
        instance - the instance from which to retrieve the value
        expectedType - the expected type of the field's value
        Returns:
        the value of the field
        Throws:
        RuntimeException - if the underlying field is inaccessible.
        IllegalArgumentException - if the specified instance is not an instance of the class or interface declaring the underlying field (or a subclass or implementor thereof).
        NullPointerException - if the specified instance is null and the field is an instance field.
        ExceptionInInitializerError - if the initialization provoked by this method fails.
      • getRawType

        public static <T> Class<T> getRawType​(Type type)
        Extract the raw type, given a type.
        Type Parameters:
        T - the type
        Parameters:
        type - the type to extract the raw type from
        Returns:
        the raw type, or null if the raw type cannot be determined.
      • isSerializable

        public static boolean isSerializable​(Class<?> clazz)
        Check if a class is serializable.
        Parameters:
        clazz - The class to check
        Returns:
        true if the class implements serializable or is a primitive
      • isAssignableFrom

        public static boolean isAssignableFrom​(Class<?> rawType1,
                                               Type[] actualTypeArguments1,
                                               Class<?> rawType2,
                                               Type[] actualTypeArguments2)
        Check the assignability of one type to another, taking into account the actual type arguements
        Parameters:
        rawType1 - the raw type of the class to check
        actualTypeArguments1 - the actual type arguements to check, or an empty array if not a parameterized type
        rawType2 - the raw type of the class to check
        actualTypeArguments2 - the actual type arguements to check, or an empty array if not a parameterized type
        Returns:
      • matches

        public static boolean matches​(Class<?> rawType1,
                                      Type[] actualTypeArguments1,
                                      Class<?> rawType2,
                                      Type[] actualTypeArguments2)
      • isAssignableFrom

        public static boolean isAssignableFrom​(Type[] actualTypeArguments1,
                                               Type[] actualTypeArguments2)
      • matches

        public static boolean matches​(Type type1,
                                      Set<? extends Type> types2)
      • isAssignableFrom

        public static boolean isAssignableFrom​(Type type1,
                                               Type[] types2)
      • isAssignableFrom

        public static boolean isAssignableFrom​(Type type1,
                                               Type type2)
      • matches

        public static boolean matches​(Type type1,
                                      Type type2)
      • isTypeBounded

        public static boolean isTypeBounded​(Type type,
                                            Type[] lowerBounds,
                                            Type[] upperBounds)
      • isAssignableFrom

        public static boolean isAssignableFrom​(Class<?> rawType1,
                                               Type[] actualTypeArguments1,
                                               Type type2)
      • matches

        public static boolean matches​(Class<?> rawType1,
                                      Type[] actualTypeArguments1,
                                      Type type2)
      • matches

        public static boolean matches​(Set<Type> types1,
                                      Set<Type> types2)
        Check whether whether any of the types1 matches a type in types2
        Parameters:
        types1 -
        types2 -
        Returns:
      • isAssignableFrom

        public static boolean isAssignableFrom​(Type[] types1,
                                               Type type2)
      • getMetaAnnotation

        public static <A extends Annotation> A getMetaAnnotation​(javax.enterprise.inject.spi.Annotated element,
                                                                 Class<A> annotationType)
        Inspects an annotated element for the given meta annotation. This should only be used for user defined meta annotations, where the annotation must be physically present.
        Parameters:
        element - The element to inspect
        annotationType - The meta annotation to search for
        Returns:
        The annotation instance found on this element or null if no matching annotation was found.
      • getQualifiers

        public static Set<Annotation> getQualifiers​(javax.enterprise.inject.spi.BeanManager beanManager,
                                                    Iterable<Annotation> annotations)
        Extract the qualifiers from a set of annotations.
        Parameters:
        beanManager - the beanManager to use to determine if an annotation is a qualifier
        annotations - the annotations to check
        Returns:
        any qualifiers present in annotations
      • getQualifiers

        public static Set<Annotation> getQualifiers​(javax.enterprise.inject.spi.BeanManager beanManager,
                                                    Iterable<Annotation>... annotations)
        Extract the qualifiers from a set of annotations.
        Parameters:
        beanManager - the beanManager to use to determine if an annotation is a qualifier
        annotations - the annotations to check
        Returns:
        any qualifiers present in annotations
      • getAllDeclaredFields

        public static Set<Field> getAllDeclaredFields​(Class<?> clazz)
        Get all the declared fields on the class hierarchy. This will return overridden fields.
        Parameters:
        clazz - The class to search
        Returns:
        the set of all declared fields or an empty set if there are none