类型不匹配;发现:newValue.type(带底层类型S)需要:T

时间:2014-02-15 17:02:22

标签: scala

我想做的是:

class ListField[+T] extends Field[MutableList[T]] {

  value = Some(new MutableList[T]())

  def +=[S >: T](newValue: S): Unit = add(newValue)

  def add[S >: T](newValue: S): Unit = value.map(l => {

    if (writable_? || !initialized_?) {

在下一行我得到:

  

类型不匹配;发现:newValue.type(底层类型为S)   要求:T

      l += newValue
      validate
      makeDirty
      change0.fire(l)
  }
})

def length: Int = list.length
//etc

我该怎么做?可能吗?如果我不做T共变体,一切都按原样运作。

字段是:

class Field[T] extends Signal[T] with ChangeStateTracking {

  private[this] var data: Option[T] = None

  private var writable = true

  def writable_? = writable

  override def now = data.get

  def value: Option[T] = data

  def validate: ValidationNel[FieldError, Option[T]] = value.successNel[FieldError]
//etc

注意:代码实际上是有效的&编译,如果我不希望T到b协变(即T而不是+ T)。只有当我尝试制作T协变时才会出现错误。

我想要一个+ T的可选列表,可以改变。

1 个答案:

答案 0 :(得分:1)

嗯,l的类型是MutableList[T],因此您显然无法使用其他类型调用+=

我怀疑您认为l由于某种原因属于ListField类型,在这种情况下,被调用的+=不会是MutableList,而是{{1 }}的