【问题标题】:Pass a class variable to another class将一个类变量传递给另一个类
【发布时间】:2011-03-15 18:34:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: java class-variables


    【解决方案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 变量来共享状态通常是一个坏主意,尤其是表示为裸数组的状态。这显然是非面向对象的。

    【讨论】:

    • 它已经在扩展另一个类。我已经编辑了我的示例以反映这一点。
    【解决方案2】:

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

    【讨论】:

    • 然后将静态添加到您的变量声明中,您可以像 A.array 一样访问它
    • @Meowmix:如果它是静态变量,您可以直接以A.array 访问它。无需使其成为GLLayer 类的一部分。
    【解决方案3】:

    您是否希望数组在任何地方都可见(就像它是一个全局变量一样)?

    如果是这样,那么它需要是静态的。

    但我的猜测是,您希望将 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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 2021-07-25
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      相关资源
      最近更新 更多