# Interface JexlMethod

public interface JexlMethod
Interface used for regular method invocation. Ex. `${foo.bar()}`

Since:
  1.0

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Class<?>`
  `getReturnType()`
  returns the return type of the method invoked.
  `Object`
  `invoke(Object obj, Object... params)`
  Invocation method, called when the method invocation should be performed and a value returned.
  `boolean`
  `isCacheable()`
  Specifies if this JexlMethod is cacheable and able to be reused for this class of object it was returned for.
  `boolean`
  `tryFailed(Object rval)`
  Checks whether a tryInvoke return value indicates a failure or not.
  `Object`
  `tryInvoke(String name, Object obj, Object... params)`
  Attempts to reuse this JexlMethod, checking that it is compatible with the actual set of arguments.

- ## Method Details

  - ### getReturnType

    Class<?> getReturnType()
    returns the return type of the method invoked.
    Returns:
      return type

  - ### invoke

    Object invoke(Object obj, Object... params) throws Exception
    Invocation method, called when the method invocation should be performed and a value returned.
    Parameters:
      `obj` - the object
      `params` - method parameters.
    Returns:
      the result
    Throws:
      `Exception` - on any error.

  - ### isCacheable

    boolean isCacheable()
    Specifies if this JexlMethod is cacheable and able to be reused for this class of object it was returned for.
    Returns:
      true if can be reused for this class, false if not

  - ### tryFailed

    boolean tryFailed(Object rval)
    Checks whether a tryInvoke return value indicates a failure or not.

    Usage is : `Object r = tryInvoke(...); if (tryFailed(r) {...} else {...}`

    Parameters:
      `rval` - the value returned by tryInvoke
    Returns:
      true if tryInvoke failed, false otherwise

  - ### tryInvoke

    Object tryInvoke(String name, Object obj, Object... params) throws JexlException.TryFailed
    Attempts to reuse this JexlMethod, checking that it is compatible with the actual set of arguments. Related to isCacheable since this method is often used with cached JexlMethod instances.
    Parameters:
      `name` - the method name
      `obj` - the object to invoke the method upon
      `params` - the method arguments
    Returns:
      the result of the method invocation that should be checked by tryFailed to determine if it succeeded or failed.
    Throws:
      `JexlException.TryFailed` - if the underlying method was invoked but threw an exception (`InvocationTargetException`)