Class Scala:泛型类可以实现其参数吗?
我对斯卡拉还是个新手。 我试图定义一个应该可用的泛型类Class Scala:泛型类可以实现其参数吗?,class,scala,generics,dynamic,proxy,Class,Scala,Generics,Dynamic,Proxy,我对斯卡拉还是个新手。 我试图定义一个应该可用的泛型类Proxy[T] 在任何需要T实例的地方。 所以我在想类似的事情 class Proxy[T] extends Dynamic with T 但这并不能在Scala中编译(我得到“需要类类型,但找不到类类型”)。 所以我的问题的答案似乎是“不”,但在我看来仍然很奇怪 在Scala中是否有可能绕过这个问题,或者我是否遗漏了一个重要的概念点 我发现最类似于我所需要的东西是scala.ref.Reference[T],但是它扩展了(()=>T)
Proxy[T]
在任何需要T实例的地方。
所以我在想类似的事情
class Proxy[T] extends Dynamic with T
但这并不能在Scala中编译(我得到“需要类类型,但找不到类类型”)。
所以我的问题的答案似乎是“不”,但在我看来仍然很奇怪
在Scala中是否有可能绕过这个问题,或者我是否遗漏了一个重要的概念点
我发现最类似于我所需要的东西是scala.ref.Reference[T],但是它扩展了(()=>T)
并且不能用在需要T的地方(至少这是我的理解)。
我想这可以解决我的问题,但这似乎有点过分。我认为不可能实现你所描述的
您可以使用运行时代理(参见java.lang.reflect.Proxy)。另一种选择是CGLIB。以下是您可以做的事情:
class MyProxy[T](val self:T)
object MyProxy {
implicit def unwrap[T](p:MyProxy[T]):T = p.self
}
现在,您可以在需要T
的任何地方使用MyProxy[T]
。编译器将找到隐式
“unwrap”函数并调用它MyProxy
不是T
,但它可以转换为T