Несоответствие типов; найдено `Сообщение`, обязательно` T` - PullRequest
0 голосов
/ 17 апреля 2019

В моем коде у меня есть метод publishMessage, требующий расширения типа из класса Message.В этом методе вызывается publish, для которого требуется message типа T.

Это дает ошибку> Несоответствие типов;найдено Message, обязательно T.

Имеет ли это отношение к T, который должен быть расширением класса Message, который объявлен с помощью метода?Я не понимаю, почему этого нельзя сделать.

В моей голове такой параметр с типом T может быть любым

Myclass

fun <T : Message> publishMessage(topic: String, type: Class<T>, message: Message) {
    val node = findOrCreateNode(topic, type)
    node.publish(message) // Type mismatch; found `Message`, required `T` .
}

Класс узла

fun publish(message: T) {
   // Implementation
}

1 Ответ

1 голос
/ 17 апреля 2019

В моей голове такой параметр с типом T может быть любым

Да, это может быть что угодно, но компилятор хочет быть уверен, что с вашими типами все в порядке. Поэтому вам придется либо создать свой объект Node, например, Node<Message>(), либо изменить publishMessage сигнатуру метода на fun <T : Message> publishMessage(topic: String, type: Class<T>, message: T). В этом случае компилятор может гарантировать безопасность типов и ошибка исчезнет.

...