Generics Kotlin:方法不能与泛型一起使用

Generics Kotlin:方法不能与泛型一起使用,generics,kotlin,Generics,Kotlin,另一方面: interface PacketDecoder<out T : Packet> : PacketTranscoder { fun decode(client: Client, buf: ByteBuf): T } 它不起作用的原因是因为我引用了一个值HashMap(),因此Kotlin无法生成encode方法的签名,因为*不是有效的通用签名(有人能确认吗?) 这是我的结果代码,我必须使用未经检查的强制转换到PacketEncoder: fun编码(数据包:T

另一方面:

interface PacketDecoder<out T : Packet> : PacketTranscoder {

    fun decode(client: Client, buf: ByteBuf): T

}

它不起作用的原因是因为我引用了一个值
HashMap()
,因此Kotlin无法生成
encode
方法的签名,因为
*
不是有效的通用签名(有人能确认吗?)

这是我的结果代码,我必须使用未经检查的强制转换到
PacketEncoder

fun编码(数据包:T,buf:ByteBuf){
val encoder=(编码器[packet.javaClass.kotlin]?:返回)作为PacketEncoder
buf.writeByte(编码器id)
编码器。编码(数据包,buf)
}

它不起作用的原因是因为我引用了一个值
HashMap()
,因此Kotlin无法生成
encode
方法的签名,因为
*
不是有效的泛型签名(有人可以确认吗?)

这是我的结果代码,我必须使用未经检查的强制转换到
PacketEncoder

fun编码(数据包:T,buf:ByteBuf){
val encoder=(编码器[packet.javaClass.kotlin]?:返回)作为PacketEncoder
buf.writeByte(编码器id)
编码器。编码(数据包,buf)
}

我尝试在Idea中实现它,它工作得非常好,没有错误。在这里工作:我尝试在Idea中实现它,它工作得非常好,没有错误。在这里工作:
interface PacketEncoder<in T : Packet> : PacketTranscoder {

    fun encode(packet: T, buf: ByteBuf)

}
fun <P : T> encode(packet: P, buf: ByteBuf)
fun <T : Packet> encode(packet: T, buf: ByteBuf) {
    val encoder = (encoders[packet.javaClass.kotlin] ?: return) as PacketEncoder<T>
    buf.writeByte(encoder.id)
    encoder.encode(packet, buf)
}