类型不匹配;找到 `Message`,需要 `T`
Type mismatch; found `Message`, required `T`
在我的代码中,我有一个方法 publishMessage
需要从 class Message
扩展的类型。在此方法中调用 publish
,它需要类型 T
的 message
。
这给出了错误 > 类型不匹配;找到 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)
。在这种情况下,编译器可以保证类型安全并且错误将消失。
在我的代码中,我有一个方法 publishMessage
需要从 class Message
扩展的类型。在此方法中调用 publish
,它需要类型 T
的 message
。
这给出了错误 > 类型不匹配;找到 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)
。在这种情况下,编译器可以保证类型安全并且错误将消失。