Обобщения и несоответствие типов Scala - PullRequest
1 голос
/ 05 августа 2011

следующие ошибки кода с ошибкой «несоответствие типов», говорящие о том, что FooProcessor должен быть Processor [M].

sealed trait Model
case class Foo extends Model
trait Processor[M <: Model]

class FooProcessor extends Processor[Foo]

class DelegatingProcessor[M <: Model] extends Processor[M] {
  val delegates = Map[String, Processor[M]]("foo" -> new FooProcessor())
}

Как вам убедить компилятор, что FooProcessor является расширением Processor [Model]?

1 Ответ

3 голосов
/ 05 августа 2011

Краткий ответ: ваш FooProcessor является расширением Processor[Foo] и относится только к Foo. В DelegatingProcessor вам нужен Processor, способный обрабатывать не только Foo, но и любой действительный Model. FooProcessor здесь просто не подходит. И - не пытайтесь убедить компилятор иначе, потому что компилятор здесь именно для того, чтобы предотвратить подобные ошибки: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...