我想将一个类变量传递给另一个类,并使其成为该类的类变量。我将如何在以下背景下执行此操作?
public class GLCamTest extends Activity {
public float array[] = something;
}
class GLLayer extends GLSurfaceView implements SurfaceHolder.Callback,
Camera.PreviewCallback, Renderer {
//Get class variable here
}
答案 0 :(得分:1)
很难理解你问的问题,但这是一个可能的答案:
使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
变量来共享状态通常是一个坏主意,尤其是表示为裸阵列的状态。这显然是非面向对象的。
答案 1 :(得分:0)
您是否可以访问A的实例?或者你想要数组是静态的?
答案 2 :(得分: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
}
}