我可以声明一个扩展自己的类型参数的装饰器类吗?

时间:2011-03-29 19:25:05

标签: scala

我想做这样的事情:

case class D[X <: A](arg1 : X, arg2: Int) extends X {
}

D是arg1的一个装饰器类,我想将它应用于几个不同类型的A类子类。

但是我收到了这个错误:

  

阶&GT; case class D [X&lt;:A](arg1:X,arg2:Int)扩展X {override val name =“D”; }   :6:错误:需要类类型但X找到

如果没有,是否有更多的scalaish方式来做这种事情?

1 个答案:

答案 0 :(得分:1)

扩展的类必须在编译时知道,而类型参数通常不是。因此,不可能这样做。

但是,如果您尝试扩展X以从接口特征A中定义的方法的实现中受益,那么您可以在实例化类时混合使用X

new D with X

如果您要保留D的“案例类”功能,请使用D作为代理,将A中定义的方法的调用转发给参数{{类型arg1的1}}是一种解决方案。

X