在Scala中键入参数化和继承

时间:2016-10-12 16:11:43

标签: scala inheritance type-parameter

我的Scala代码遵循以下模式。

class T

class A1[S <: T](private val arg1: String, private val arg2: S)
class A2[S <: T](private val arg1: String, private val arg2: S)
  extends A1[S]
class A3[S <: T](private val arg1: String, private val arg2: S)
  extends A2[S]

我希望有一些方法可以缩短上面的代码,因为这里有很多重复。我希望A1的子类隐式具有类型参数化[S <: T]和构造函数(private val arg1: String, private val arg2: S)。有没有办法实现这一点,还是有必要为我定义的每个子类重复这个文本?

1 个答案:

答案 0 :(得分:0)

您可以用A1替换A2A3AImpl吗?

sealed trait Condition
case object One   extends Condition
case object Two   extends Condition
case object Three extends Condition

sealed trait AParent[A]
case class AImpl[A, B <: A](private val arg1: String, 
                            private val arg2: B, 
                            c: Condition) extends AParent[A]