我的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/