【发布时间】:2015-04-29 10:46:57
【问题描述】:
假设我有下面使用动态代理的伪 scala 代码:
trait IClient {
def multiply(a : Int) = Int
}
class MyInvocationHandler extends InvocationHandler {
def invoke(proxy: Any, method: Method, args: Array[AnyRef]): AnyRef = {
//do nothing
}}
class factory[P]() {
val clientClass = implicitly[ClassTag[P]].runtimeClass
def getProxy() : P = java.lang.reflect.Proxy.newProxyInstance(
getClass.getClassLoader,
Array(clientClass),
new MyInvocationHandler()).asInstanceOf[P]
}
def main(): Int = {
(new factory[IClient]).getProxy().multiply(1)
}
现在我想将以下信息传递给 MyInvocationHandler.invoke: 1. multiply(1) 的调用方法“main()” 2.multiply(1) 的 main() 所在的调用者类 3.乘法函数名
我不想在 multiply(1) 中添加更多参数,例如
multiply(callerClassName, callerMethodName, calleeName, 1)
有没有办法在保留原始接口 multiply(Int):Int 的同时将这些清单信息传递给 MyInvocationHandler.invoke?
欣赏任何线索!
【问题讨论】:
标签: scala dynamic reflection proxy