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

类,该类将RealmObject扩展为单例

陆子默
2023-03-14

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

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

难道不可能有一个类使用单例设计模式扩展RealmObject吗?

这仅仅是我必须解释的领域的限制吗?

下面是上下文的一段代码

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个答案

法弘亮
2023-03-14

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

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

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

 类似资料:
  • 问题内容: 我正在学习Flask,并且对如何构造代码有些困惑。因此,我尝试如下扩展Flask主类: 这样,当我想启动应用程序时,我可以执行以下操作: 这样,我可以在类中对方法和路由进行排序,但是问题是使用自装饰器时: 引发错误为unresolved reference ‘route’。我想这不是我应该构建应用程序的方式。我应该怎么做,或者如何解决错误? 问题答案: 这样做是没有意义的。你将创建子类

  • 该类包含: > 一个无参数构造函数,用于创建具有指定边1、边2和边3的三角形。 所有三个数据字段的访问器方法。 名为getArea()的方法,该方法返回此三角形的区域。 一个名为GetPermission()的方法,返回此三角形的周长。 *一个名为toString()的方法,返回三角形的字符串描述。 有关计算三角形面积的公式,请参见编程练习2.15(java编程入门第9版)。toString()方

  • 验证码生成 缓存支持

  • 本文向大家介绍Angular 2 简单类扩展angular的Http类,包括了Angular 2 简单类扩展angular的Http类的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 编译失败;有关详细信息,请参阅编译器错误输出。 用户类: Myapplication文件 尝试:使用--info或--debug选项运行以获取更多日志输出。

  • 问题内容: public class MyGeneric {} 据我所知,以上示例中的两个子类均有效。我想知道Java如何知道何时在实例化子类时定义超类中给定的类型,以及何时将它们定义为实际的类名(即,它如何知道T,E不是类名)? 旁注,是否允许(即使不常见)对通用类型使用多个字母?如果(由于某些严重的计划错误)类型与现有类冲突,该怎么办? 那会发生什么呢? 编辑:感谢您的及时答复。为了回答我的第