Class MethodInvokers


  • public final class MethodInvokers
    extends java.lang.Object
    Converts Method objects to lambdas.

    More specifically, produces instances of single-method interfaces which redirect calls to methods; see asInterfaceInstance(Class, Method).

    Calling supplier methods with no arguments

    If the interface's single-method defines no arguments, use asFunction(Method) and then apply the function passing in the object to receive the method call.

    For example to invoke String.length():

     final Method method = String.class.getMethod("length");
     final Function<String, Integer> function = MethodInvokers.asFunction(method);
     assertEquals(3, function.apply("ABC"));
     

    Calling function methods with one argument

    If the interface's single-method defines one argument, use asBiFunction(Method) and then apply the function passing in the object to receive the method call. The second argument to the function is the only argument to the method.

    For example to invoke String.charAt(int):

     final Method method = String.class.getMethod("charAt", int.class);
     final BiFunction<String, Integer, Character> function = MethodInvokers.asBiFunction(method);
     assertEquals('C', function.apply("ABC", 2));
     
    Since:
    3.13.0
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private MethodInvokers()
      No need to create instances.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static <T,​U>
      java.util.function.BiConsumer<T,​U>
      asBiConsumer​(java.lang.reflect.Method method)
      Produces a BiConsumer for a given consumer Method.
      static <T,​U,​R>
      java.util.function.BiFunction<T,​U,​R>
      asBiFunction​(java.lang.reflect.Method method)
      Produces a BiFunction for a given a function Method.
      static <T,​U>
      FailableBiConsumer<T,​U,​java.lang.Throwable>
      asFailableBiConsumer​(java.lang.reflect.Method method)
      Produces a FailableBiConsumer for a given consumer Method.
      static <T,​U,​R>
      FailableBiFunction<T,​U,​R,​java.lang.Throwable>
      asFailableBiFunction​(java.lang.reflect.Method method)
      Produces a FailableBiFunction for a given a function Method.
      static <T,​R>
      FailableFunction<T,​R,​java.lang.Throwable>
      asFailableFunction​(java.lang.reflect.Method method)
      Produces a FailableFunction for a given a supplier Method.
      static <R> FailableSupplier<R,​java.lang.Throwable> asFailableSupplier​(java.lang.reflect.Method method)
      Produces a FailableSupplier for a given a supplier Method.
      static <T,​R>
      java.util.function.Function<T,​R>
      asFunction​(java.lang.reflect.Method method)
      Produces a Function for a given a supplier Method.
      static <T> T asInterfaceInstance​(java.lang.Class<T> interfaceClass, java.lang.reflect.Method method)
      Produces an instance of the given single-method interface which redirects its calls to the given method.
      static <R> java.util.function.Supplier<R> asSupplier​(java.lang.reflect.Method method)
      Produces a Supplier for a given a supplier Method.
      private static java.lang.reflect.Method requireMethod​(java.lang.reflect.Method method)
      Throws NullPointerException if method is null.
      private static java.lang.invoke.MethodHandle unreflect​(java.lang.reflect.Method method)  
      private static java.lang.invoke.MethodHandle unreflectUnchecked​(java.lang.reflect.Method method)  
      • Methods inherited from class java.lang.Object

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

      • MethodInvokers

        private MethodInvokers()
        No need to create instances.
    • Method Detail

      • asBiConsumer

        public static <T,​U> java.util.function.BiConsumer<T,​U> asBiConsumer​(java.lang.reflect.Method method)
        Produces a BiConsumer for a given consumer Method. For example, a classic setter method (as opposed to a fluent setter). You call the BiConsumer with two arguments: (1) the object receiving the method call, and (2) the method argument.
        Type Parameters:
        T - the type of the first argument to the operation: The type containing the Method.
        U - the type of the second argument to the operation: The type of the method argument.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asBiFunction

        public static <T,​U,​R> java.util.function.BiFunction<T,​U,​R> asBiFunction​(java.lang.reflect.Method method)
        Produces a BiFunction for a given a function Method. You call the BiFunction with two arguments: (1) the object receiving the method call, and (2) the method argument. The BiFunction return type must match the method's return type.

        For example to invoke String.charAt(int):

         final Method method = String.class.getMethod("charAt", int.class);
         final BiFunction<String, Integer, Character> function = MethodInvokers.asBiFunction(method);
         assertEquals('C', function.apply("ABC", 2));
         
        Type Parameters:
        T - the type of the first argument to the function: The type containing the method.
        U - the type of the second argument to the function: the method argument type.
        R - the type of the result of the function: The method return type.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asFailableBiConsumer

        public static <T,​U> FailableBiConsumer<T,​U,​java.lang.Throwable> asFailableBiConsumer​(java.lang.reflect.Method method)
        Produces a FailableBiConsumer for a given consumer Method. For example, a classic setter method (as opposed to a fluent setter). You call the FailableBiConsumer with two arguments: (1) the object receiving the method call, and (2) the method argument.
        Type Parameters:
        T - the type of the first argument to the operation: The type containing the Method.
        U - the type of the second argument to the operation: The type of the method argument.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asFailableBiFunction

        public static <T,​U,​R> FailableBiFunction<T,​U,​R,​java.lang.Throwable> asFailableBiFunction​(java.lang.reflect.Method method)
        Produces a FailableBiFunction for a given a function Method. You call the FailableBiFunction with two arguments: (1) the object receiving the method call, and (2) the method argument. The BiFunction return type must match the method's return type.
        Type Parameters:
        T - the type of the first argument to the function: The type containing the method.
        U - the type of the second argument to the function: the method argument type.
        R - the type of the result of the function: The method return type.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asFailableFunction

        public static <T,​R> FailableFunction<T,​R,​java.lang.Throwable> asFailableFunction​(java.lang.reflect.Method method)
        Produces a FailableFunction for a given a supplier Method. You call the Function with one argument: the object receiving the method call. The FailableFunction return type must match the method's return type.
        Type Parameters:
        T - the type of the first argument to the function: The type containing the method.
        R - the type of the result of the function: The method return type.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asFailableSupplier

        public static <R> FailableSupplier<R,​java.lang.Throwable> asFailableSupplier​(java.lang.reflect.Method method)
        Produces a FailableSupplier for a given a supplier Method. The FailableSupplier return type must match the method's return type.

        Only works with static methods.

        Type Parameters:
        R - The Method return type.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asFunction

        public static <T,​R> java.util.function.Function<T,​R> asFunction​(java.lang.reflect.Method method)
        Produces a Function for a given a supplier Method. You call the Function with one argument: the object receiving the method call. The Function return type must match the method's return type.

        For example to invoke String.length():

         final Method method = String.class.getMethod("length");
         final Function<String, Integer> function = MethodInvokers.asFunction(method);
         assertEquals(3, function.apply("ABC"));
         
        Type Parameters:
        T - the type of the first argument to the function: The type containing the method.
        R - the type of the result of the function: The method return type.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • asInterfaceInstance

        public static <T> T asInterfaceInstance​(java.lang.Class<T> interfaceClass,
                                                java.lang.reflect.Method method)
        Produces an instance of the given single-method interface which redirects its calls to the given method.

        For the definition of "single-method", see MethodHandleProxies.asInterfaceInstance(Class, MethodHandle).

        Type Parameters:
        T - The interface type.
        Parameters:
        interfaceClass - a class object representing T.
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
        See Also:
        MethodHandleProxies.asInterfaceInstance(Class, MethodHandle)
      • asSupplier

        public static <R> java.util.function.Supplier<R> asSupplier​(java.lang.reflect.Method method)
        Produces a Supplier for a given a supplier Method. The Supplier return type must match the method's return type.

        Only works with static methods.

        Type Parameters:
        R - The Method return type.
        Parameters:
        method - the method to invoke.
        Returns:
        a correctly-typed wrapper for the given target.
      • requireMethod

        private static java.lang.reflect.Method requireMethod​(java.lang.reflect.Method method)
        Throws NullPointerException if method is null.
        Parameters:
        method - The method to test.
        Returns:
        The given method.
        Throws:
        java.lang.NullPointerException - if method is null.
      • unreflect

        private static java.lang.invoke.MethodHandle unreflect​(java.lang.reflect.Method method)
                                                        throws java.lang.IllegalAccessException
        Throws:
        java.lang.IllegalAccessException
      • unreflectUnchecked

        private static java.lang.invoke.MethodHandle unreflectUnchecked​(java.lang.reflect.Method method)