Я пытаюсь использовать дженерики, чтобы не потерять подтип реализации.
Мне не совсем понятно, как искать этот вопрос, хотя я считаю, что он имеет название.
У меня есть черта с именем conf и некоторые реализации (где WB - это экземпляр Params):
trait Conf[P <: Params]
class ConfInstance extends Conf[WB]
Теперь я хочу, чтобы серверная часть могла преобразовывать параметры этого типа в другой класс, например:
trait Coder[P <: Params]
class AABBCC(conf: Conf[WB]) extends Coder[WB]
def backend[P <: Params](conf: Conf[P]): Coder[P] = {
conf match {
case abcConf: ConfInstance => new AABBCC(abcConf)
}
но компилятор жалуется: "Выражение типа AABBCC" не соответствует ожидаемому типу Coder [P] "
Я попытался добавить asInstanceOf [Coder [P]], но мне не нравится это решение.
Так, каков правильный способ сделать это преобразование?