Package: org.codehaus.groovy.runtime

## [Java] Class ConversionHandler

- org.codehaus.groovy.runtime.ConversionHandler

- All Implemented Interfaces and Traits:
    InvocationHandler, Serializable

      public abstract class ConversionHandler
      extends Object
      implements InvocationHandler, Serializable

  This class is a general adapter to map a call to a Java interface to a given delegate.

- - ### Constructor Summary

    Constructors
    Constructor and description
    `ConversionHandler(Object delegate)` Creates a ConversionHandler with an delegate.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public boolean` | `equals(Object obj)` Indicates whether some other object is "equal to" this one.
    `` | `public Object` | `getDelegate()` Returns the delegate.
    `` | `public int` | `hashCode()` Returns a hash code value for the delegate.
    `` | `public Object` | `invoke(Object proxy, Method method, Object[] args)` This method is a default implementation for the invoke method given in InvocationHandler.
    `` | `public abstract Object` | `invokeCustom(Object proxy, Method method, Object[] args)` This method is called for all Methods not defined on Object.
    `` | `public static boolean` | `isCoreObjectMethod(Method method)` Checks whether a method is a core method from java.lang.Object.
    `` | `public String` | `toString()` Returns a String version of the delegate.

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll`

- - ### Constructor Detail

    - #### public ConversionHandler(Object delegate)

      Creates a ConversionHandler with an delegate.

      throws:
        IllegalArgumentException if the given delegate is null
      Parameters:
        `delegate` - the delegate

  - ### Method Detail

    - #### @Override
      public boolean equals(Object obj)

      Indicates whether some other object is "equal to" this one. The delegate is used if the class of the parameter and the current class are equal. In other cases the method will return false. The exact class is here used, if inheritance is needed, this method must be overwritten.

      See Also:
        Object.equals

    - #### public Object getDelegate()

      Returns the delegate.

      Returns:
        the delegate

    - #### @Override
      public int hashCode()

      Returns a hash code value for the delegate.

      See Also:
        Object.hashCode

    - #### @Override
      public Object invoke(Object proxy, Method method, Object[] args)

      This method is a default implementation for the invoke method given in InvocationHandler. Any call to a method with a declaring class that is not Object, excluding toString() and default methods is redirected to invokeCustom.

      Methods like equals and hashcode are called on the class itself instead of the delegate because they are considered fundamental methods that should not be overwritten. The toString() method gets special treatment as it is deemed to be a method that you might wish to override when called from Groovy. Interface default methods from Java 8 on the other hand are considered being default implementations you don't normally want to change. So they are called directly too

      In many scenarios, it is better to overwrite the invokeCustom method where the core Object related methods are filtered out.

      throws:
        Throwable if caused by the delegate or the method
      Parameters:
        `proxy` - the proxy
        `method` - the method
        `args` - the arguments
      Returns:
        the result of the invocation by method or delegate
      See Also:
        invokeCustom(Object, Method, Object[])
        InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])

    - #### public abstract Object invokeCustom(Object proxy, Method method, Object[] args)

      This method is called for all Methods not defined on Object. The delegate should be called here.

      throws:
        Throwable any exception causes by the delegate
      Parameters:
        `proxy` - the proxy
        `method` - the method
        `args` - the arguments
      Returns:
        the result of the invocation of the delegate
      See Also:
        invoke(Object, Method, Object[])
        InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])

    - #### public static boolean isCoreObjectMethod(Method method)

      Checks whether a method is a core method from java.lang.Object. Such methods often receive special treatment because they are deemed fundamental enough to not be tampered with.

      Parameters:
        `method` - the method to check
      Returns:
        true if the method is deemed to be a core method

    - #### @Override
      public String toString()

      Returns a String version of the delegate.

      See Also:
        Object.toString