Kotlin:方法不能和generics一起使用
作为这个的另一面:
interface PacketDecoder : PacketTranscoder { fun decode(client: Client, buf: ByteBuf): T }
我正在尝试使用这个:
interface PacketEncoder : PacketTranscoder { fun encode(packet: T, buf: ByteBuf) }
虽然PacketDecoder
似乎工作正常,我不能引用encode(T, ByteBuf)
方法。 IntelliJ IDEA自动完成甚至不显示它作为一个选项,手动写入它导致一个未解决的参考错误。
为了解决它,我目前正在使用这个黑客,但我不认为这是做到这一点的正确方法。
fun encode(packet: P, buf: ByteBuf)
它不工作的原因是因为我是从值HashMap
因此Kotlin无法生成encode
方法的签名,因为*
不是有效的通用签名(有人可以证实?)。
这是我的结果代码,我不得不使用未经检查的转换到PacketEncoder
:
fun encode(packet: T, buf: ByteBuf) { val encoder = (encoders[packet.javaClass.kotlin] ?: return) as PacketEncoder buf.writeByte(encoder.id) encoder.encode(packet, buf) }