2010-07-14 20 views
0

Je souhaite passer une variable de classe à une autre classe et en faire une variable de classe de cette classe. Comment ferais-je cela dans le contexte suivant?Transmettre une variable de classe à une autre classe

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

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

Répondre

1

Il est difficile de comprendre wjat que vous demandez, mais voici une réponse possible:

Marque classe B une sous-classe 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 
    } 

Si array est redéclarée être public static, vous obtenez un situation où il y a un attribut array qui peut être appelé A.array ou B.array. (Ou dans A soit ou B comme juste array ... ou même a.array ou b.arraya et b ont des types A et B respectivement.)

Si vous ne pouvez pas créer une relation directe ou sous-type entre A et B (ou A, B et une troisième classe contenant les déclarations) alors vous n'avez pas de chance. Il n'y a aucun moyen qu'ils puissent partager des déclarations. Toutefois, vous pouvez utiliser des importations statiques pour donner l'impression que la déclaration est partagée. Par exemple:

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' 
    } 

Soit dit en passant, il est généralement une mauvaise idée d'utiliser static variables à partager l'état, en particulier l'état représenté des tableaux comme nus. Ceci est distinctement non orienté objet.

+0

Cela étend déjà une autre classe. J'ai modifié mon exemple pour refléter cela. – Skizit

0

Avez-vous accès à l'instance de A? Ou peut-être voulez-vous que le tableau soit statique?

+0

Je veux que ce soit statique – Skizit

+0

puis ajouter statique à votre déclaration de variable et vous pouvez y accéder comme A.array – nanda

+0

@Meowmix: S'il est une variable statique vous pouvez accéder directement comme comme 'A.array' . Pas besoin de le faire partie de la classe 'GLLayer'. – missingfaktor

0

Voulez-vous que le tableau soit visible partout (comme s'il s'agissait d'une variable globale)?

Si c'est le cas, il doit être statique. Mais je suppose que vous voulez passer une instance de GLCamTest à un objet GLLayer, auquel cas vous devriez utiliser une fonction setter ou la passer dans le constructeur.

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 
    } 
} 
Questions connexes