2011-11-23 26 views
5

Digamos que tengo 3 clases: A, Data y Bestablecer y obtener una variable estática de dos clases diferentes en Java

que pasar una variable de clase A que establece que pasaba variable a una variable privada en clase Data.

Luego, en la clase B, deseo llamar a esa variable específica que se ha cambiado.

Así que hago

Data data = new Data(); 
data.getVariable(); 

A continuación, se devolverá un valor nulo, ya que en la clase Data Me inicializar variables a la nada (ex: int v;), y creo que la clase B se está iniciando una nueva clase de marca y restablecer el valores predeterminados, pero no sé cómo solucionar esto.

Sé que la variable se está configurando correctamente porque en la clase A si hago data.getVariable() se imprimirá la variable que se configuró.

Clase A:

Data data = new Data(); 
int d = 1; 
data.setVariable(d); 

Clase Data:

private static int b; 

public void setVariable(int s) 
{ 
    b = s; 
} 

public int getVariable() 
{ 
    return b; 
} 

Clase B:

Data data = new Data(); 
private int v; 

v = data.getVariable(); 
System.out.println(v); 

Esto imprimirá 0 en lugar del valor real

+2

Incluya su código, no j use descripciones de sus clases. –

+0

intentado 'extends'? – Zhianc

+0

Mi código para las 3 clases tiene más de 800 líneas, así que inventé lo que actualmente estoy probando en él ... No sé lo que se extiende o no, así que si pudiera explicar mejor y si eso resolvería mi problema solución, entonces lo intentaré. – user1062898

Respuesta

10

Cuando se instancia un objeto Data en la clase A, y una instancia Data otro objeto en la clase B, que son dos instancias diferentes de la clase Data. Ambos instancian d a 0 de forma predeterminada. A continuación, llama al setVariable en la instancia en la clase A y le pasa el valor de 1; pero la instancia en la clase B permanece en 0. Para cambiar el valor de la instancia en la clase B, necesitaría llamar al setVariable en la instancia en la clase B.

Lo que parece que está buscando es un miembro estático. Los miembros estáticos son los mismos en todas las instancias de la misma clase. Simplemente coloque la palabra clave static antes de los métodos o campos que desea usar. Generalmente, se accede a los miembros y campos estáticos utilizando el nombre de la clase en la que se declaran (es decir, MyClass.doMethod()).Por ejemplo:

Clase de datos (actualizado):

private static int b; 

public static void setVariable(int s) 
{ 
    b = s; 
} 

public static int getVariable() 
{ 
    return b; 
} 

Clase A:

Data.setVariable(d); 

Clase B:

v = Data.getVariable(); 
System.out.println(v); 
+1

Los métodos no necesitan ser estáticos. Todavía puede usar "nuevo" y los métodos no son estáticos. La variable es suficiente –

+0

Incluso poniendo estática antes de los métodos, todavía me dará 0. – user1062898

+0

Bien, parecía haber solucionado mi problema en el que estaba declarando las variables y asignándolas para obtener los datos. – user1062898

1

Edición: mi primera sugerencia fue usar static para la variable b, y el autor cambió su pregunta al agregar esa sugerencia.

Arregla lo que estás tratando de hacer. Escribo el ejemplo de código que compila:

public class Demo { 
     public static void main(String[] args) { 
      A a = new A(); 
      B b = new B(); 
      a.doWhatever(); 
      b.doSomethingElse(); 
     } 
    } 
    class Data { 
     private static int b; 

     public void setVariable(int s) 
     { 
      b = s; 
     } 

     public int getVariable() 
     { 
      return b; 
     } 
    } 
    class A { 
     public void doWhatever() { 
      Data data = new Data(); 
      int d = 1; 
      data.setVariable(d); 
     } 
    } 

    class B { 
     Data data = new Data(); 
     private int v; 
     public void doSomethingElse() { 
      v = data.getVariable(); 
      System.out.println(v); 
     } 
    } 
+0

Este somehwat funciona, pero cuando imprimo V en Clase B, todavía muestra nulo. Actualicé el código principal nuevamente con estática. – user1062898

+0

Estoy un poco confundido. ¿Cómo puede imprimir "nulo"? es un número entero –

+0

Ok, bueno yo estaba haciendo un ejemplo, en el mío es una cadena pero no importa de todos modos ya que el número entero imprimirá 0 en lugar del valor real, mi mal. Tan solo reemplace null con 0. – user1062898

Cuestiones relacionadas