public T invoke(RT receiver, Object... arguments) {
		assert receiver != null;
		final Method method;
		synchronized (this) {
			if (this.method == null) {
				this.method = getMethod(receiver, arguments);
				method = this.method;
			} else {
				method = this.method;
			}
		}
		try {
			return this.returnType.cast(method.invoke(receiver, arguments));
		} catch (RuntimeException | Error exception) {
			throw exception;
		} catch (Throwable exception) {
			throw new RuntimeException(exception);
		}
	}
public T invoke ( RT receiver , Object ... arguments ) { assert receiver != null ; final Method method ; synchronized ( this ) { if ( this . method == null ) { this . method = getMethod ( receiver , arguments ) ; method = this . method ; } else { method = this . method ; } } try { return this . returnType . cast ( method . invoke ( receiver , arguments ) ) ; } catch ( RuntimeException | Error exception ) { throw exception ; } catch ( Throwable exception ) { throw new RuntimeException ( exception ) ; } }
Invoke the method.

@param receiver the receiver, never {@code null}.
@param arguments the arguments.
@return the result of the invocation.