hakain
@hakain
Немного знаю С/С++, Qt, и микроконтроллеры

Как конкатенировать последовательности в параметризованном классе?

Разбираюсь с полиморфизмом в Scala и не могу разобраться со следующим вопросом.
Например есть некоторая иерархия классов:

class A
class B extends A
class C extends B

И есть некоторый класс, конструктор которого принимает последовательность элементов и метод push который принимает новую последовательность элементов, конкатенирует ее с существующей последовательностью и возвращает новый Foo.

class Foo[T](a: Seq[T]) {
  def push[T](b: Seq[T]): Foo[T] = {
    new Foo(a ++ b)           // тут получаю ошибку - type mismatch; found : Seq[Any]; required: Seq[T]
  }
}

Но в моем случае это не работает и я не совсем понимаю почему Seq[T] кастуется в Seq[Any].

val foo = new Foo(Seq(new C, new C))
val bar = foo.push(Seq(new B, new B))
println(bar) // должен содержать [C, C, B, B]
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
hakain
@hakain Автор вопроса
Немного знаю С/С++, Qt, и микроконтроллеры
class Foo[T](a: Seq[T]) {
  def push[U >: T](b: Seq[U]): Foo[U] = {
    new Foo(a ++ b)
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы