使用泛型进行类型的过滤和处理

今天看netty源码时,发现一种针对泛型进行数据过滤的处理方法。简单代码如下所示:

	public class EchoClientHandler extends SimpleChannelInboundHandlerAdapter<ByteBuf> {

		@Override
		public void channelRead0(ChannelHandlerContext ctx, ByteBuf in) {
			System.out.println("Client received" + ByteBufUtil.hexDump(in.readBytes(in.readableBytes())));
		}
	}

这个代码的意思就是只有当数据的类型为ByteBuf类型时,才能够进入这个方法,并调用相应的channelRead0方法。从实现的角度来看就是这个方法在执行时,会进行类型以下的一个判断

if(data instanceOf ByteBuf) {
//todo do something
}

这就意味着在代码中,是可以拿到这个泛型参数的。并且可以利用这个泛型参数作一些特别的处理,或者参与业务逻辑。在传统的类型过虑处理中,我们通常会实现以下的一个方法来表示,当前处理类需要支持哪一种类型的数据信息。

//声明接口方法
public Class<?> supportType() {
        return Sth.class;
}

//调用代码
Object param = someData;
for(Impl impl : implList) {
	if(impl.supportType().isAssignableFrom(param.getClass)) {
		//then do logic
        }
}

那么如果采用泛型,这个多余的supportType方法就可以省略,意味着可以直接将相应的参数添加到类签名上。然后直接进行解析即可。这样就不需要再每个实现类写多余的实现方法了。

继续阅读“使用泛型进行类型的过滤和处理”