【问题标题】:Type parametrization and inheritance in ScalaScala 中的类型参数化和继承
【发布时间】:2016-10-12 16:11:42
【问题描述】:

我有遵循以下模式的 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 &lt;: T] 和构造函数(private val arg1: String, private val arg2: S)。有什么方法可以做到这一点,还是有必要为我定义的每个子类重复这个文本?

【问题讨论】:

    标签: scala inheritance type-parameter


    【解决方案1】:

    你能用一个AImpl替换A1A2A3吗?

    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]
    

    【讨论】:

    • 很遗憾没有。 AiA(i-1) 的子类,这一点很重要
    • 我刚刚编辑了我的答案,它未能将arg2 指定为AParent 的子类型。这个新答案是否仍然不足以满足您的需求?
    • 嗨@AlexGrounds - 我编辑的答案也不能满足您的需求?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2023-03-25
    • 2014-10-15
    相关资源
    最近更新 更多