2010-07-14 2 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 вы спрашиваете, но вот возможный ответ:

класс Make 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.array или B.array. (Или в любом A или B, как только array ... или даже a.array или b.array где a и b имеют типов A и B соответственно.)

Если вы не можете создать прямую или подтип отношения между A и B (или A, B и некоторый третий класс, содержащий декларации), то вам не повезло. Они не могут делиться декларациями.

Однако вы можете использовать статический импорт, чтобы он выглядел так, как будто объявление является общим. Например:

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

0

У вас есть доступ к экземпляру A? Или, может быть, вы хотите, чтобы массив был статичным?

+0

Я хочу, чтобы быть статическим – Skizit

+0

затем добавить статический к вашей декларации переменной, и вы можете получить доступ к нему, как A.array – nanda

+0

@Meowmix: Если это статическая переменная вы можете получить доступ к нему, как в 'A.array' , Не нужно делать его частью класса «GLLayer». – missingfaktor

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 
    } 
} 
Смежные вопросы