How to use java proxy in scala
inner-classes, java, proxy-classes, scala
Solution
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()
}
}
Problem
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.