我想要做的是:類型不匹配;發現:newValue.type(與基礎型S)要求:T
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
注:該代碼實際工作&編譯,如果我不想牛逼到b協變(即的T代替+ T)。只有當我嘗試使T協變時纔會出現錯誤。
我想要一個可選列表+ T,可以更改。
您嘗試添加不同類型的l和newValue(即使S是T的子類型),我想您必須明確定義此操作。 – Ashalynd
不是MutableList不變嗎? –
是的。我沒有打擾檢查可變列表的簽名。確實是T,而List是+ T。我將不得不嘗試與清單,看看。 –