Я пытаюсь создать «реестр» объектов Companion - путем их хранения в списке, который связан с помощью Generics.Объект Companion в списке, связанный супер-признаком класса class
Пример лучше: сообщил
trait Foo
case class A() extends Foo
object A
case class B() extends Foo
object B
case class C() extends Foo
object C
trait HasFoos {
def allFoos: List[ _ <: Foo.type]
}
case class FooLookup() extends HasFoos {
def allFoos = List(A,B,C)
}
Ошибка на FooLookup "Защиту allFoos" является
- несоответствие типов; Найдено: A. необходимо: Foo.type
Необходимо, чтобы HasFoos.allFoos выглядел, или, альтернативно, должен выглядеть список (A, B, C).
Я попробовал def allFoos: List[ _ <: Foo]
; однако это также ошибки, и я хочу работать с «Companion Object», а не классом - я уверен, что мне нужна еще более общая сахара-пыль вокруг него, но я не уверен, чего он требует.
благодарит заранее.
Я хотел бы указать, что подстановочный знак здесь: 'def allFoos: List [_ <: Foo.type]' не нужно из-за дисперсии типа Scala. 'List' в scala является ковариантным, что означает, что вы можете безопасно присваивать тип, например,' List [String] 'переменной типа' List [Any] '- что-то, что вы никогда не могли бы сделать на Java. – ghik