Я пытаюсь найти другой способ избежать ошибки несоответствия типа, которая выглядит более корректно, чем тот, который я использую прямо сейчас.Ошибка несоответствия типа Scala
Учитывая перечень и функции, соответственно:
var l = List[Int]()
def append[U](cmd: U) = {
l = l :+ cmd
}
При интерпретации кода выше, я получаю следующее сообщение об ошибке:
<console>:10: error: type mismatch;
found : List[Any]
required: List[Int]
l = l :+ cmd
^
Как я установил его, был модификацией функция append работает следующим образом:
def append[U](cmd: U) = {
l = (l :+ cmd).asInstanceOf[List[Int]]
}
Есть ли способ определить приложение end без использования asInstanceOf?
Стараясь быть яснее, цель состояла в том, чтобы создать класс ниже
abstract class Cstruct{
type T
var value: T
def append[U](value:U)
}
Cstruct должен быть построен таким образом, чтобы можно было бы определить новые классы, которые распространяются Cstruct, но используют разные структуры данных для значения T. Подобно Cseq, который использует список любых типов элементов, но должен быть возможен для создания аналогичного с помощью Set или Map.
class Cseq[U] (v: U) extends Cstruct{
type T = List[U]
var value: T = List[U](v)
override def append[U](cmd: U) = {
value = (value :+ cmd).asInstanceOf[T]
}
}
Почему 'append' generic? Вы можете только добавить 'Int' (или супертип) в 'List [Int]' – Lee