Jen*_*der 5 proxy scala dynamic
是否有可能有一个方法,它接受一个任意的实例并返回一个java.reflection.Proxy或类似的与原始参数相同的类型?
我想它应该看起来像这样:
def createProxy[S](model: S)(implicit manifest: Manifest[S]): S = {...}
Run Code Online (Sandbox Code Playgroud)
或这个
def createProxy[S, T<:S](model: S)(implicit manifest: Manifest[S]): T = {...}
Run Code Online (Sandbox Code Playgroud)
其中T是S的子类型,它是由所有实现的接口的组合产生的,因为它似乎不能代理实际的类,而只是接口.
我认为以下应该可以解决问题。请注意,它无法返回 S,因为 S 可能不是接口。
import java.lang.reflect._
def createProxy[S](model: S)(implicit manifest: Manifest[S]) = {
val clazz = manifest.erasure
Proxy.newProxyInstance(clazz.getClassLoader, clazz.getInterfaces, new InvocationHandler() {
def invoke(proxy:Object, method:Method, args:scala.Array[Object]) = {
method.invoke(model, args:_*)
}
})
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |