2012-02-24 88 views
2

有基類A它有一個方法來加載數據源。
各類從A派生,包括派生類B如何靜態實例化一個依賴實例方法的成員?

現在,我需要在類B例如類B中有一個靜態成員變量。 mStaticOfB即實例化​​只有一次ALLB的實例使用。

這裏需要注意的是,要實例化靜態mStaticOfB我需要使用由基類A繼承的數據源。但是我需要一個對象的實例來獲取該數據,而我沒有這個數據源。

我該如何解決這個問題?是否有一個好的/標準的方法來處理這個問題?我想出來的唯一想法(並且試圖不使用)是讓B類爲 單身人士。

+0

從你的描述,我看不出如何讓B類單身可以解決這個問題。你能解釋一下嗎? – 2012-02-24 07:08:16

+0

@Ted Hopp:我不會將成員變量設置爲'static',並且使用單個變量對所有實例都是相同的。 – Jim 2012-02-24 07:13:39

回答

3

什麼NISHANT說,除了線程:

private static FieldType mStaticOfB; 
... 
public B(..) { 
    super(); 
    synchronized(B.class) { 
     if (mStaticOfB == null) { 
     //code to set mStaticOfB 
     } 
    } 
} 
3

你可以只讓B類具有單元化靜態mStaticOfB,它會在第一次調用構造函數的時候初始化iff mStaticOfB

private static FieldType mStaticOfB; 
... 
public B(..){ 

    if(mStaticOfB==null){ 
     //code to set mStaticOfB 
    } 
} 
+0

除了使其成爲線程安全外。 – brettw 2012-02-24 07:12:26