0

我想将一个类变量传递给另一个类,并使其成为该类的类变量。在以下情况下我将如何做到这一点?

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

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

3 回答 3

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.arrayor B.array。(或者在 anyABas just array... 甚至 asa.arrayb.arraywherea并分别b具有类型AB。)

如果您无法在Aand B(或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顺便说一句,使用变量来共享状态通常是一个坏主意,尤其是表示为裸数组的状态。这显然是非面向对象的。

于 2010-07-14T10:01:52.357 回答
0

您可以访问 A 的实例吗?或者,也许您希望数组是静态的?

于 2010-07-14T09:58:08.093 回答
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
    }
}
于 2010-07-14T10:13:07.260 回答