Class Invokable<T,​R>

  • Type Parameters:
    T - the type that owns this method or constructor.
    R - the return type of (or supertype thereof) the method or the declaring type of the constructor.
    All Implemented Interfaces:
    AnnotatedElement, GenericDeclaration, Member

    public abstract class Invokable<T,​R>
    extends AccessibleObject
    implements GenericDeclaration
    Wrapper around either a Method or a Constructor. Convenience API is provided to make common reflective operation easier to deal with, such as isPublic(), getParameters() etc.

    In addition to convenience methods, TypeToken.method(java.lang.reflect.Method) and TypeToken.constructor(java.lang.reflect.Constructor<?>) will resolve the type parameters of the method or constructor in the context of the owner type, which may be a subtype of the declaring class. For example:

       Method getMethod = List.class.getMethod("get", int.class);
       Invokable<List<String>, ?> invokable = new TypeToken<List<String>>() {}.method(getMethod);
       assertEquals(TypeToken.of(String.class), invokable.getReturnType()); // Not Object.class!
       assertEquals(new TypeToken<List<String>>() {}, invokable.getOwnerType());
    • Method Detail

      • isOverridable

        public abstract boolean isOverridable()
        Returns true if this is an overridable method. Constructors, private, static or final methods, or methods declared by final classes are not overridable.
      • isVarArgs

        public abstract boolean isVarArgs()
        Returns true if this was declared to take a variable number of arguments.
      • invoke

        public final R invoke​(@Nullable
                              T receiver,
                              Object... args)
                       throws InvocationTargetException,
        Invokes with receiver as 'this' and args passed to the underlying method and returns the return value; or calls the underlying constructor with args and returns the constructed instance.
        IllegalAccessException - if this Constructor object enforces Java language access control and the underlying method or constructor is inaccessible.
        IllegalArgumentException - 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.
        InvocationTargetException - if the underlying method or constructor throws an exception.
      • getReturnType

        public final TypeToken<? extends R> getReturnType()
        Returns the return type of this Invokable.
      • getParameters

        public final ImmutableList<Parameter> getParameters()
        Returns all declared parameters of this Invokable. Note that if this is a constructor of a non-static inner class, unlike Constructor.getParameterTypes(), the hidden this parameter of the enclosing class is excluded from the returned parameters.
      • getExceptionTypes

        public final ImmutableList<TypeToken<? extends Throwable>> getExceptionTypes()
        Returns all declared exception types of this Invokable.
      • returning

        public final <R1 extends RInvokable<T,​R1> returning​(Class<R1> returnType)
        Explicitly specifies the return type of this Invokable. For example:
           Method factoryMethod = Person.class.getMethod("create");
           Invokable<?, Person> factory = Invokable.of(getNameMethod).returning(Person.class);
      • returning

        public final <R1 extends RInvokable<T,​R1> returning​(TypeToken<R1> returnType)
        Explicitly specifies the return type of this Invokable.
      • getOwnerType

        public TypeToken<T> getOwnerType()
        Returns the type of T.
      • getModifiers

        public final int getModifiers()
        Specified by:
        getModifiers in interface Member
      • isSynthetic

        public final boolean isSynthetic()
        Specified by:
        isSynthetic in interface Member
      • isPublic

        public final boolean isPublic()
        Returns true if the element is public.
      • isProtected

        public final boolean isProtected()
        Returns true if the element is protected.
      • isPackagePrivate

        public final boolean isPackagePrivate()
        Returns true if the element is package-private.
      • isPrivate

        public final boolean isPrivate()
        Returns true if the element is private.
      • isStatic

        public final boolean isStatic()
        Returns true if the element is static.
      • isFinal

        public final boolean isFinal()
        Returns true if this method is final, per Modifier.isFinal(getModifiers()).

        Note that a method may still be effectively "final", or non-overridable when it has no final keyword. For example, it could be private, or it could be declared by a final class. To tell whether a method is overridable, use isOverridable().

      • isAbstract

        public final boolean isAbstract()
        Returns true if the method is abstract.
      • isNative

        public final boolean isNative()
        Returns true if the element is native.
      • isSynchronized

        public final boolean isSynchronized()
        Returns true if the method is synchronized.
      • hashCode

        public int hashCode()
        hashCode in class Object