将RealmObject扩展为单例的类

时间:2016-12-07 13:01:03

标签: java android constructor singleton realm

我的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;
}

1 个答案:

答案 0 :(得分:1)

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

  • 如果对象不受管理,那为什么它是RealmObject? (Realm允许与其MVCC架构保持一致,如果你使用分离的副本,那么为什么要使用Realm来实现其持久性呢?)
  • 如果对象管理,那么您将如何从多个线程访问它? (托管的RealmObjects是线程限制的〜你需要使它成为ThreadLocal,并在其Realm关闭时清除它)

但是,是的,您需要RealmObject的公共构造函数,以便Realm可以实例化其代理实例。也许你可以尝试一个protected构造函数,看看如果你这样做,可以通过反射实例化RealmProxy。