I have an interface as Iface that has two methods written in java. That interface is an inner interface of Zzz class. I have written the invocation handler in scala. Then I tried to create a new proxy instance in scala like below.
 val handler = new ProxyInvocationHandler // this handler implements
                                          //InvocationHandler interface
 val impl = Proxy.newProxyInstance(
  Class.forName(classOf[Iface].getName).getClassLoader(),
  Class.forName(classOf[Iface].getName).getClasses,
  handler
).asInstanceOf[Iface]
But here the compiler says that
$Proxy0 cannot be cast to xxx.yyy.Zzz$Iface
How can I do this with proxy, in a short way.
Here is the fixed version of your code. Also it compiles and even does something!
import java.lang.reflect.{Method, InvocationHandler, Proxy}
object ProxyTesting {
  class ProxyInvocationHandler extends InvocationHandler {
    def invoke(proxy: scala.AnyRef, method: Method, args: Array[AnyRef]): AnyRef = {
      println("Hello Stackoverflow when invoking method with name \"%s\"".format(method.getName))
      proxy
    }
  }
  trait Iface {
    def doNothing()
  }
  def main(args: Array[String]) {
    val handler = new ProxyInvocationHandler
    val impl = Proxy.newProxyInstance(
      classOf[Iface].getClassLoader,
      Array(classOf[Iface]),
      handler
    ).asInstanceOf[Iface]
    impl.doNothing()
  }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With