Package org.zkoss.lang.reflect

## Class FacadeInvoker

- java.lang.Object
- - org.zkoss.lang.reflect.FacadeInvoker

- All Implemented Interfaces:
    `java.lang.reflect.InvocationHandler`

      public class FacadeInvoker
      extends java.lang.Object
      implements java.lang.reflect.InvocationHandler

  The facade invocation handler. Like the facade pattern, this invocation handler is used to facade an object with a set of interfaces.

  This Invocation handler assumes the object being facaded (a.k.a, the target) has all methods of these interfaces, but it might not implement all of these interfaces directly.

  It happens when you need to provide interfaces to classes that come from third parties.

  Example:

      class A {
        public void f() {...}
      }
      interface I {
        public void f();
      }
      Then, you could do:
      I i = (I)FacadeInvoker.newInstance(new A(), new Class[] {I});

  Author:
    tomyeh

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `FacadeInvoker​(java.lang.Object target)` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.Object` | `invoke​(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args)` |
    `static java.lang.Object` | `newInstance​(java.lang.Object target, java.lang.Class[] interfaces)` | Creates an object that implements the giving interfaces by wrapping a giving object, target.
    `static java.lang.Object` | `newInstance​(java.lang.Object target, java.lang.Class[] interfaces, java.lang.ClassLoader clsLoader)` | Creates an object that implements the giving interfaces by wrapping a giving object, target.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### FacadeInvoker

          protected FacadeInvoker​(java.lang.Object target)

  - ### Method Detail

    - #### newInstance

          public static final java.lang.Object newInstance​(java.lang.Object target,
                                                           java.lang.Class[] interfaces,
                                                           java.lang.ClassLoader clsLoader)

      Creates an object that implements the giving interfaces by wrapping a giving object, target.

      The target must have all methods in all given interfaces, but might not implement all these interfaces.

    - #### newInstance

          public static final java.lang.Object newInstance​(java.lang.Object target,
                                                           java.lang.Class[] interfaces)

      Creates an object that implements the giving interfaces by wrapping a giving object, target.

      A shortcut: newInstance( target, interfaces, Thread.currentThread().getContextClassLoader()).

    - #### invoke

          public java.lang.Object invoke​(java.lang.Object proxy,
                                         java.lang.reflect.Method method,
                                         java.lang.Object[] args)
                                  throws java.lang.Throwable

      Specified by:
        `invoke` in interface `java.lang.reflect.InvocationHandler`
      Throws:
        `java.lang.Throwable`