Java 泛型在类继承方面的使用

对泛型的了解不多,最近了一个类继承方面的包装,更进一步了解泛型能如何使用。

需求如下:

  • 有一个工厂类,通过工厂类去生产一个 Consumer。
  • Consumer 需要调用 setMessageListener 方法去设置一个 IMessageListener。
  • 这个 IMessageListener 有一个方法onMessage(Object message)

现在需要,使用者在使用onMessage方法时,可以指定message对象的类型,而不用自己在onMessage方法里强转一下。例如:

旧:onMessage(Object message)
新1:onMessage(String strMsg)
新2:onMessage(MyObject myObj)
新3:。。。

最简单的方法,把 IMessageListener 修改成如下形式:

public interface IMessageListener<T> {
    void onMessage(T msg);
}

调用方

consumer.setMessageListener(new IMessageListener<IBusMessage>() {
            @Override
            public void onMessage(MyMessageType msg) {
            // do sth
       }
}

包装方(对setMessageListener的包装)

public void setMessageListener(IMessageListener listener) throws MessageBusException {
    // 注意1,声明接口时,不用指定 <T>
    dmlc.setMessageListener(new MessageListener() {
        @Override
        public void onMessage(Message rawMsg) {

            Object objMsg = msgConverter.fromMessage(rawMsg);
            // 注意2,这里直接把 objMsg 传给 onMessage 方法就可以了,不用转成 T 类型,Java自己帮我们转了。
            // 原来以为,这是需要手动转成 T 所在的 class 或 其它类型
            listener.onMessage(objMsg);
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值