类型不匹配;找到 `Message`,需要 `T`

Type mismatch; found `Message`, required `T`

在我的代码中,我有一个方法 publishMessage 需要从 class Message 扩展的类型。在此方法中调用 publish,它需要类型 Tmessage

这给出了错误 > 类型不匹配;找到 Message,需要 T

这与 T 是否需要作为 class 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` .
}

Node class

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

In my head such a parameter with type T can be anything

是的,它可以是任何东西,但编译器希望确保您的类型没有任何问题。因此,您必须像这样 Node<Message>() 创建 Node 对象或将 publishMessage 方法签名更改为 fun <T : Message> publishMessage(topic: String, type: Class<T>, message: T)。在这种情况下,编译器可以保证类型安全并且错误将消失。