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 中访问它。