【问题标题】:Scala: can a generic class implement its parameter?Scala:泛型类可以实现它的参数吗?
【发布时间】:2015-03-09 14:29:14
【问题描述】:

我对 Scala 还是很陌生。 我正在尝试定义一个应该可用的通用类Proxy[T] 在任何预期有 T 实例的地方。 所以我在想类似的东西

class Proxy[T] extends Dynamic with T

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

在 Scala 中是否有可能规避这个问题,还是我遗漏了一个重要的概念?

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

【问题讨论】:

    标签: class scala generics dynamic proxy


    【解决方案1】:

    我认为不可能实现你所描述的。

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

    【讨论】:

      【解决方案2】:

      您可以这样做:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多