当前位置: 首页 > 知识库问答 >
问题:

我的课不是封闭的课

柯曜文
2023-03-14

所以我有类构造函数:

public class HealthDataStore { // this class is 3rd party api - can't modify
    public HealthDataStore(Context context, HealthDataStore.ConnectionListener listener){ /* bla... */ }

    /* bla... */

    // with Listener Interface:
    public interface ConnectionListener {
        void onConnected();
        void onConnectionFailed(HealthConnectionErrorResult var1);
        void onDisconnected();
    }
}

在我的存储库类中,我有:

public class HealthRepository {
    private string DSConnectionStatus;

    public void connectDataStore(HealthDSConnectionListener listener) {
        mStore = new HealthDataStore(app, listener);
        mStore.connectService();
    }

    // with inner class:
    public class HealthDSConnectionListener implements HealthDataStore.ConnectionListener{
        @Override public void onConnected() { DSConnectionStatus = "Connected"; }

        @Override public void onConnectionFailed(HealthConnectionErrorResult healthConnectionErrorResult) { DSConnectionStatus = "Connection Failed"; }

        @Override public void onDisconnected() { DSConnectionStatus = "Disconnected"; }
    };
}
public class SplashViewModel extends AndroidViewModel {

    public void connectRepoDataStore(){
        // repo is object of class HealthRepository
        repo.connectDataStore(mConnectionListener)
        // other things to do here 
    }

    private final HealthRepository.HealthDSConnectionListener mConnectionListener = new HealthRepository.HealthDSConnectionListener(){
        @Override public void onConnected() {
            super.onConnected(); // i need this super to set DSConnectionStatus value
            // other things to do here 
        }

        @Override public void onConnectionFailed(HealthConnectionErrorResult error) {
            super.onConnectionFailed(error); // i need this super to set DSConnectionStatus value
            // other things to do here 
        }

        @Override public void onDisconnected() {
            super.onDisconnected(); // i need this super to set DSConnectionStatus value
            // other things to do here 
        }
    }

那我该如何做到这一点呢?让我的最终侦听器类能够在healthrepository类中设置DSConnectionStatus?

共有1个答案

邵展
2023-03-14

如果您知道必须扩展内部类,请尽量避免使用它们。相反,使用一个单独的类,并用一个字段交换外部类。如果需要修改不想公开的私有字段,请创建包私有设置程序。

public class HealthRepository {
    private String DSConnectionStatus;

    public void connectDataStore(HealthDSConnectionListener listener) {
        mStore = new HealthDataStore(app, listener);
        mStore.connectService();
    }

    void setConnectionStatus(String status) {
        DSConnectionStatus = status;
    }
}
// create another class in the same package
public class HealthDSConnectionListener implements HealthDataStore.ConnectionListener {
    private final HealthRepository repo;

    public HealthDSConnectionListener(HealthRepository repo) {
        this.repo = repo;
    }

    @Override public void onConnected() { repo.setConnectionStatus("Connected"); }
    @Override public void onDisconnected() { repo.setConnectionStatus("Disconnected"); }

    @Override public void onConnectionFailed(HealthConnectionErrorResult error) {
        repo.setConnectionStatus("Connection Failed"); 
    }
};
public class SplashViewModel extends AndroidViewModel {
    private final HealthRepository repo;

    public void connectRepoDataStore() {
        // repo is object of class HealthRepository
        repo.connectDataStore(mConnectionListener)
        // other things to do here 
    }

    private final HealthDSConnectionListener mConnectionListener = new HealthDSConnectionListener(repo) {
        @Override public void onConnected() {
            super.onConnected();
            // ...
        }

        @Override public void onConnectionFailed(HealthConnectionErrorResult error) {
            super.onConnectionFailed(error);
            // ...
        }

        @Override public void onDisconnected() {
            super.onDisconnected(); 
            // ...
        }
    }
}
 类似资料:
  • 我正在尝试制作一个俄罗斯方块游戏,我得到了编译器错误 当我尝试创建对象时 我对每个形状都使用内部类。这是我的部分代码 我做错了什么?

  • 以下是他们关于协会课程的演讲幻灯片: 有时,关联具有的属性或行为不仅仅属于两端的类。我们可以使用关联类对此进行建模。假设下图对学生分配到模块的模型进行了建模。 属性< code>finalMark不适合关联的任何“end”。此外,有必要为每个学生(每个模块)记录一个以上的分数,反之亦然。因此,属性< code>finalMark是< code>Student和< code>Module之间关联的属

  • 问题内容: 出于教育目的,我尝试制作一个服务器和一个客户端,其中服务器从多个客户端接收数据并回显每条消息。问题是,当我尝试让服务器一次将回显发送到所有客户端时。 我搜寻并回答了许多类似的问题,但是没有一个对我有帮助。希望你能指出我的错误。提前致谢。 问题答案: 您的嵌套类需要外部类的一个实例,因为它不是静态的-但你不 具备 外部类的一个实例。 尝试制作两个嵌套类。看起来他们无论如何都不 需要 引用

  • 这和这里问的问题差不多。 但我的问题扩展了这一点。 我可以把它改成“A扩展B”,但我必须使我的方法是非静态的,这只会把我的整个系统搞砸。 我这样做了,然后它告诉我,几乎所有的其他类可能50不能引用非静态方法从类A的方法BB。

  • 问题内容: 我有一个ResultSet方法,该方法将最终关闭连接: 但是我得到了错误: 编辑整个ErrorTrace 我在做什么不对? 问题答案: 您将返回一个a 以便将来使用,但是在使用它之后,您将关闭连接,因此由于资源已关闭,因此您无法检索数据。请注意,即使您在或代码块中返回了某些内容,也始终会调用它, 详细来说,这就是问题所在: 打开连接 准备一份声明 获取结果集 返回结果集 关闭连接(可能

  • 问题内容: 一旦我的代码进入我的循环,它就会生成is close异常。是什么导致此异常,我该如何纠正? 编辑: 我在代码中注意到我与另一个嵌套循环,两个结果集都来自同一数据库,这是一个问题吗? 问题答案: 听起来好像您在遍历第一个语句的结果集之前在同一连接中执行了另一个语句。如果要嵌套处理来自同一数据库的两个结果集,则说明您做错了什么。这些集合的组合应在数据库侧完成。