Modifying/overriding 库 class' 方法正确
Modifying/overriding a library class' methods properly
我正在使用 ararog 的 WebSocket Rails-Android 库。
我根据从服务器端收到的数据循环订阅了几个频道。我对所有通道使用相同的 WebSocketRailsDataCallback,唯一不同的是通道名称。我的问题是回调的 onDataAvailable(Object data)
数据仅包含接收到的 JSON,其中不包含频道名称,我无法找到一种方法来知道在哪个频道上收到了响应。
我尝试创建自定义接口和 class 分别使用 onDataAvailable(Object data, String channelName)
签名和覆盖 dispatch
方法扩展 WebSocketRailsDataCallback 和 WebSocketRailsChannel ,但是 class' 变量是私有的,这意味着我不能有如下构造函数,因此不能将 WebSocketRailsChannel 转换为自定义 class:
public CustomWebSocketRailsChannel(WebSocketRailsChannel channel)
{
super(/*channel arguments*/);
}
我可以在方法中使用 getDeclaredFields()
获取字段,但它对我的转换没有帮助(我需要它,因为 dispatcher.subscribe
方法 returns 基础 class).
我考虑的下一个解决方案是为所有相关的 classes(调度程序、通道、dataCallback 等)创建完全自定义的 classes,而不是继承它,但这是一个粗略的解决方案。另一个是联系图书馆作者。任何更好和更简单的想法将不胜感激。
问题已解决;我走得太深了,没有注意到我可以通过仅覆盖 DataCallback 来做到这一点。我创建了以下 class:
public abstract class CustomWebSocketRailsDataCallback implements WebSocketRailsDataCallback {
public CustomWebSocketRailsDataCallback(String channel)
{
mChannel = channel;
}
public String mChannel = null;
}
创建了此 class 的实例,将频道名称保存在 mChannel 中并在 onDataAvailable 中访问它。
我正在使用 ararog 的 WebSocket Rails-Android 库。
我根据从服务器端收到的数据循环订阅了几个频道。我对所有通道使用相同的 WebSocketRailsDataCallback,唯一不同的是通道名称。我的问题是回调的 onDataAvailable(Object data)
数据仅包含接收到的 JSON,其中不包含频道名称,我无法找到一种方法来知道在哪个频道上收到了响应。
我尝试创建自定义接口和 class 分别使用 onDataAvailable(Object data, String channelName)
签名和覆盖 dispatch
方法扩展 WebSocketRailsDataCallback 和 WebSocketRailsChannel ,但是 class' 变量是私有的,这意味着我不能有如下构造函数,因此不能将 WebSocketRailsChannel 转换为自定义 class:
public CustomWebSocketRailsChannel(WebSocketRailsChannel channel)
{
super(/*channel arguments*/);
}
我可以在方法中使用 getDeclaredFields()
获取字段,但它对我的转换没有帮助(我需要它,因为 dispatcher.subscribe
方法 returns 基础 class).
我考虑的下一个解决方案是为所有相关的 classes(调度程序、通道、dataCallback 等)创建完全自定义的 classes,而不是继承它,但这是一个粗略的解决方案。另一个是联系图书馆作者。任何更好和更简单的想法将不胜感激。
问题已解决;我走得太深了,没有注意到我可以通过仅覆盖 DataCallback 来做到这一点。我创建了以下 class:
public abstract class CustomWebSocketRailsDataCallback implements WebSocketRailsDataCallback {
public CustomWebSocketRailsDataCallback(String channel)
{
mChannel = channel;
}
public String mChannel = null;
}
创建了此 class 的实例,将频道名称保存在 mChannel 中并在 onDataAvailable 中访问它。