您的位置:首页 > 编程语言 > Java开发

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

2018-01-12 15:17 435 查看
对泛型的了解不多,最近了一个类继承方面的包装,更进一步了解泛型能如何使用。

需求如下:

有一个工厂类,通过工厂类去生产一个 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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: