我的Android应用程序中有一个配置类,该类存储在Realm数据库中。我只是按照单例设计模式对其进行了编辑,因此配置实例永远只有一次。

问题是,该类现在具有一个私有构造函数,以防止在不调用我的“ getInstance”方法的情况下进行实例化。但是,RealmObject似乎需要公共构造函数。

是否不可能有一个使用单例设计模式扩展RealmObject的类?

这仅仅是我要考虑的Realm限制吗?

这是上下文代码段:

public static  AppConfiguration getInstance(){
    if(configuration == null){
        synchronized (AppConfiguration.class) {
            if (configuration == null) {
                configuration = new AppConfiguration();
            }
        }
    }
    return configuration;
}

//constructor is private to prevent instantiation without using getInstance, enforces singleton
private AppConfiguration() { //The constructor defined as private which is causing the problem
    this.isRegistered = false;
    this.isLoggedIn = false;
}

最佳答案

从概念上讲,您的单例设置在Realm的上下文中没有意义,因为您同步了一个非托管对象(因此,通过互斥/锁定,“一次只能允许一个线程访问它”)会引起问题:


如果对象是非托管对象,那么为什么它是RealmObject? (Realm允许与其MVCC架构保持一致,如果您使用分离副本,那么为什么要完全使用Realm来保持其持久性?)
如果对象是托管对象,那么如何从多个线程访问它? (托管的RealmObject是线程受限的,您需要将其设置为ThreadLocal,并在其Realm关闭时将其清除)




但是,是的,您需要RealmObject的公共构造函数,以便Realm可以实例化其代理实例。也许您可以尝试使用protected构造函数,并查看RealmProxy是否可以通过反射实例化。

关于java - 将RealmObject扩展为单例的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41018191/

10-09 01:42