SimpleChannelInboundHandler处理泛型的泛型

某群友提出一个关于netty的问题。服务端他这么写的

服务端

是想通过Result的泛型来定位哪一个SimpleChannelInboundHandler处理。

客户端是这么写的

客户端

可以看到,客户端发送的Doctor对象。

结果本希望是输出 “Doctor 读取到数据啦 + result”,但是结果如下:

就有疑问了,遂debug:

明明是Doctor类型,却进到new SimpleChannelInboundHandler>里。

跟下源码...

可以看到,先调用acceptInboundMessage判断类型是否匹配,匹配才进入channelRead0,不匹配就进入下一个InboudHandler。所以,netty会判断msg是否匹配Result类型,很明显是匹配的,就进入了泛型为User的InboudHandler里。

怎么解决呢?acceptInboundMessage是public类型(netty已经考虑到这种情况),我们只需要创建SimpleChannelInboundHandler的时候重写一下acceptInboundMessage就ok了。改动如下

重写acceptInboundMessage

输出结果

输出结果

搞定。

你可能感兴趣的:(SimpleChannelInboundHandler处理泛型的泛型)