Передать переменную класса другому классу - PullRequest
0 голосов
/ 14 июля 2010

Я хотел бы передать переменную класса другому классу и сделать ее переменной класса этого класса.Как бы я сделал это в следующем контексте?

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

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

Ответы [ 3 ]

1 голос
/ 14 июля 2010

Трудно понять, что вы спрашиваете, но вот возможный ответ:

Сделать класс 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 голосов
/ 14 июля 2010

Хотите ли вы, чтобы массив был виден везде (как если бы это была глобальная переменная)?

Если так, то он должен быть статическим.

Но я думаю, что вы хотитепередать экземпляр GLCamTest объекту GLLayer, и в этом случае вы должны использовать функцию установки или передать ее в конструктор.

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
    }
}
0 голосов
/ 14 июля 2010

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

...