我想做这样的事情:
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方式来做这种事情?
答案 0 :(得分:1)
扩展的类必须在编译时知道,而类型参数通常不是。因此,不可能这样做。
但是,如果您尝试扩展X
以从接口特征A
中定义的方法的实现中受益,那么您可以在实例化类时混合使用X
new D with X
如果您要保留D
的“案例类”功能,请使用D
作为代理,将A
中定义的方法的调用转发给参数{{类型arg1
的1}}是一种解决方案。
X