универсальное преобразование scala A [T] => B [T] - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь использовать дженерики, чтобы не потерять подтип реализации. Мне не совсем понятно, как искать этот вопрос, хотя я считаю, что он имеет название. У меня есть черта с именем 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]], но мне не нравится это решение.

Так, каков правильный способ сделать это преобразование?

1 Ответ

0 голосов
/ 27 августа 2018

Кажется, это проблема IDE (это IntelliJ IDEA?).

IDE неправильно сообщает об ошибке компиляции, но код компилируется.

enter image description here

.

...