2010-07-14 221 views
0

我想將一個類變量傳遞給另一個類並使其成爲該類的類變量。我如何在以下方面做到這一點?將一個類變量傳遞給另一個類

 public class GLCamTest extends Activity { 
public float array[] = something; 
    } 

    class GLLayer extends GLSurfaceView implements SurfaceHolder.Callback, 
    Camera.PreviewCallback, Renderer { 
    //Get class variable here 
} 

回答

1

這是很難理解wjat你問,但這裏有一個可能的答案:

製作B類A的子類:

public class A { 
     // Declaration of the 'array' attribute 
     public float[] array = new float[]{1.1f, 2.2f, 3.3f}; 

    } 

    class B extends A { 
     // Every instance of 'B' also has an 'array' attribute 
    } 

如果array被重新聲明爲public static,你會得到一個有array屬性可以被稱爲A.arrayB.array的情況。 (或在任何AB剛剛array ...甚至爲a.arrayb.array其中ab分別有類型AB。)

如果您不能創建AB之間的直接或亞型的關係(或AB和第三類包含聲明),那麼你是運氣不好。他們無法共享聲明。

但是,您可以使用靜態導入來使它看起來像聲明是共享的。例如:

public class A { 
     // Declaration of the 'array' attribute 
     public float[] array = new float[]{1.1f, 2.2f, 3.3f}; 

    } 


    import static A.array; 
    class B { 
     // now I can use 'array' without qualifying it with 'A' 
    } 

順便提及,通常是一個壞主意使用static變量共享狀態,尤其是狀態表示爲裸陣列。這明顯不是面向對象的。

+0

它已經擴展了另一個類。我編輯了我的示例來反映這一點。 – Skizit 2010-07-14 10:02:47

0

您有權訪問A的實例嗎?或者,也許你想要數組是靜態的?

+0

我希望它是靜態的 – Skizit 2010-07-14 09:59:22

+0

然後添加靜態到您的變量聲明,你可以像A.array – nanda 2010-07-14 10:06:51

+0

@Meowmix訪問:如果它是一個靜態變量,你可以直接訪問它的'A.array' 。不需要將它變成「GLLayer」類的一部分。 – missingfaktor 2010-07-14 10:21:46

0

你想讓數組在任何地方都可見(好像它是一個全局變量)?

如果是這樣,那麼它需要是靜態的。

但我的猜測是你想要將一個GLCamTest實例傳遞給一個GLLayer對象,在這種情況下,你應該使用一個setter函數或者在構造函數中傳遞它。

public class GLCamTest extends Activity { 
    public float array[] = something; 
} 

class GLLayer extends GLSurfaceView implements SurfaceHolder.Callback, 
    Camera.PreviewCallback, Renderer { 
    private GLCamTest camTest; 
    public void setCamTest(GLCamTest camTest) { 
     this.camTest = camTest; 
     // Now you can access the array using camTest.array 
    } 
}