在我的代码中,我有一个方法publishMessage
,它需要从类Message
扩展的类型。在此方法中,调用publish
,其类型为message
的{{1}}。
这将导致错误>类型不匹配;找到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
}
答案 0 :(得分:1)
在我看来,T类型的参数可以是任何东西
是的,可以是任何东西,但是编译器希望确保您的类型没有问题。因此,您必须像这样创建Node<Message>()
的Node对象,或者将publishMessage
的方法签名更改为fun <T : Message> publishMessage(topic: String, type: Class<T>, message: T)
。在这种情况下,编译器可以保证类型安全,并且错误将消失。