子类中具有派生参数的构造函数

Constructor with derived parameters in subclasses

我定义了一个 Trait Box 和两个继承自 Box 的 Case 类 RedBox 和 BlueBox。我系统的那部分工作正常。现在,我想创建一个新的元素层次结构,以便可以通过这种方式将具有可变 属性 位置的基本元素 Token 扩展到特定类型的 Box:

abstract class Token {
   var position: Box
}

class RedToken(position: RedBox, val marked: Boolean) extends Token {
   def test() = {
      position = RedBox()
   }
}

我需要位置 属性 可变,但编译器向我抛出“重新分配给 val”。然后,如果我修改构造函数签名以强制 var:

class RedToken(var position: RedBox, val marked: Boolean) extends Token {
}

...我得到“class RedToken 需要是抽象的,因为 class 类型 Box 的令牌中的变量位置未定义”。我不明白发生了什么,我可以帮忙吗?谢谢

使用generic classes是为了RedToken#position: RedBox

trait Box
class RedBox extends Box

abstract class Token[T <: Box] {
  var position: T
}

class RedToken(var position: RedBox) extends Token[RedBox] {
}