Scala:泛型类可以实现其参数吗?

时间:2015-01-11 20:10:31

标签: class scala generics dynamic proxy

我对Scala很新。 我试图定义一个应该可用的泛型类Proxy[T] 在任何预期T实例的地方。 所以我在想像

这样的东西
class Proxy[T] extends Dynamic with T

但是这不会在Scala中编译(我得到"需要类类型,但是T找到")。 所以我的问题的答案似乎是" No",但对我来说看起来仍然很奇怪。

Scala有可能绕过这个问题,还是我错过了一个重要的概念位?

我发现我需要的最相似的东西是scala.ref.Reference [T],但是它扩展了(()=> T) 并且不能用于预期T的地方(至少这是我的理解)。 我认为https://code.google.com/p/classgenerator/可以解决我的问题,但似乎有点过分。

2 个答案:

答案 0 :(得分:1)

我认为没有可能实现你所描述的目标。

您可以使用的是运行时代理(请参阅java.lang.reflect.Proxy)。另一种选择是CGLIB。

答案 1 :(得分:0)

您可以做以下事情:

class MyProxy[T](val self:T)
object MyProxy {
  implicit def unwrap[T](p:MyProxy[T]):T = p.self
}

现在,您可以在需要MyProxy[T]的任何地方使用T。编译器会找到implicit" unwrap"功能并调用它。 MyProxy 不是T,但可以转换为T