code: @SuppressWarnings("unchecked")
          public static <P> P proxy(ProxyHandler<P> proxyHandler) {
                  List<MethodSupport<?, ProxyHandler<P>>> methods = cls(proxyHandler).allMethods();
                  P toProxy = proxyHandler.target;
  
                  return (P) Proxy.newProxyInstance(toProxy.getClass().getClassLoader(), toProxy.getClass().getInterfaces(), (p, m, args) -> If((MethodSupport<Object, ProxyHandler<P>>) $(methods).forEach(e -> {
                          if (e.name().equals(m.getName()) && e.argCount() == m.getParameterCount()
                                  && avoidNull($(m.getParameterTypes()).forEach((pt, i) -> {
                                  if (!pt.isAssignableFrom(e.argTypes()[$(i)]))
                                          return BreakWithResult(false);
                                  else
                                          return true;
                          }), () -> true))
                                  return BreakWithResult(e);
                          else
                                  return null;
                  }), res -> (Object) res.invoke(proxyHandler, args)).Else(() -> m.invoke(toProxy, args)));
          }
docs: generate proxy object with given ProxyHandler<br>
  ProxyHandler is an abstract class with a constructor taking in the
  object to do proxy<br>
  see ProxyHandler or
  <a href="https://github.com/wkgcass/Style/">tutorial</a> for more
  info on how to use.
  
  @param proxyHandler proxy handler
  @return proxy object generated with Proxy.newProxyInstance(...)
  @see ProxyHandler
  @see Proxy#newProxyInstance(ClassLoader, Class[], InvocationHandler)