Class DelegatingInvocationHandler

java.lang.Object
org.apache.calcite.util.DelegatingInvocationHandler
All Implemented Interfaces:
InvocationHandler

public abstract class DelegatingInvocationHandler extends Object implements InvocationHandler
A class derived from DelegatingInvocationHandler handles a method call by looking for a method in itself with identical parameters. If no such method is found, it forwards the call to a fallback object, which must implement all of the interfaces which this proxy implements.

It is useful in creating a wrapper class around an interface which may change over time.

Example:


   import java.sql.Connection;
   Connection connection = ...;
   Connection tracingConnection =
       (Connection) Proxy.newProxyInstance(null,
           new Class[] {Connection.class},
           new DelegatingInvocationHandler() {
             protected Object getTarget() {
               return connection;
             }
             Statement createStatement() {
               System.out.println("statement created");
               return connection.createStatement();
             }
         });
 
  • Constructor Details

    • DelegatingInvocationHandler

      public DelegatingInvocationHandler()
  • Method Details

    • invoke

      public @Nullable Object invoke(Object proxy, Method method, @Nullable Object[] args) throws Throwable
      Specified by:
      invoke in interface InvocationHandler
      Throws:
      Throwable
    • getTarget

      protected abstract Object getTarget()
      Returns the object to forward method calls to, should the derived class not implement the method. Generally, this object will be a member of the derived class, supplied as a parameter to its constructor.