gpt4 book ai didi

scala - 动态代理,无需在 scala 中显式指定类型

转载 作者:行者123 更新时间:2023-12-03 01:14:59 25 4
gpt4 key购买 nike

是否有可能有一个方法,它接受任意实例并返回 java.reflection.Proxy 或与原始参数具有相同类型的类似对象?

我想它应该看起来像这样:

def createProxy[S](model: S)(implicit manifest: Manifest[S]): S = {...}

或者这个

def createProxy[S, T<:S](model: S)(implicit manifest: Manifest[S]): T = {...}

其中 T 是 S 的子类型,它是由所有已实现的接口(interface)组合而成的,因为我似乎无法代理实际的类,而只能代理接口(interface)。

最佳答案

我认为以下应该可以解决问题。请注意,它无法返回 S,因为 S 可能不是接口(interface)。

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:_*)
}
})
}

关于scala - 动态代理,无需在 scala 中显式指定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com