2016-12-07 32 views
0

我在Android應用程序中有一個存儲在Realm數據庫中的配置類。我只是編輯它以遵循單例設計模式,因此只有一次配置實例。將RealmObject作爲單例擴展的類

問題是,該類現在有一個私有構造函數來防止實例化,而不調用我的'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

概念你單身的設置沒有意義的領域的情況下,因爲你同步的非託管對象(從而使「只能有一個線程訪問它立即「通過互斥/鎖定),這帶來了問題:

  • 如果對象是非託管的,那麼爲什麼它是一個RealmObject? (Realm允許與其MVCC體系結構保持一致,如果你使用分離的副本,那麼爲什麼使用Realm來保持其持久性?)
  • 如果對象託管的,那麼如何從多個線程訪問它? (管理RealmObjects是線程受限〜你需要使它的ThreadLocal,並清除出來時,其境界關閉)

但是,是的,你需要RealmObject的公共構造,這樣的境界能實例化它的代理實例。也許你可以嘗試一個protected的構造函數,看看RealmProxy是否可以通過反射實例化,如果你這樣做的話。

+0

我的想法是,我將有一個應用程序啓動時創建的對象的單個實例。這個單獨的實例將被保留在Realm中,但是如果我需要在其他任何地方訪問實例,而無需從Realm數據庫中讀取它,也可以使用該實例。 我希望將AppConfiguration存儲在Realm數據庫中以在會話之間保留。只要使用Realm存儲版本,並在需要時從Realm數據庫創建/讀取/更新/刪除,會更有意義嗎?如果我需要訪問其他地方的實例,而不必從Realm數據庫中讀取實例,那麼' – Calco

+0

'也是可用的.'只有在訪問域時才從域讀取,但實際上這是主要的好處 - 您總是到處看到同一個物體。在我看來,如果這種同步是你想要的方式,那麼你應該堅持它作爲JSON或類似的共享偏好,如果你沒有真正使用Realm,就沒有多少意義了。領域與它的任何東西。 – EpicPandaForce

+0

Realm旨在允許自動更新以寫入發生在後臺線程上的數據庫。如果你不聽這個對象的變化,並且你不需要爲了實現這個而保持它的管理,那麼最好把它變成一個POJO,對吧? :p – EpicPandaForce