Saltar al contenido

Variables globales en Java

septiembre 23, 2021
apple touch icon@2

Entendiendo el problema

Considero la calificación de variable global como una variable a la que se puede acceder y cambiar en cualquier parte del código sin preocuparse por la llamada estática / instancia o pasar cualquier referencia de una clase a otra.

Por lo general, si tienes clase A

public class A {
    private int myVar;

    public A(int myVar) {
        this.myVar = myVar;
    }

    public int getMyVar() {
        return myVar;
    }

    public void setMyVar(int mewVar) {
        this.myVar = newVar;
    }
}

y quieres acceder y actualizar myvar en una clase B,

public class B{

    private A a;

    public void passA(A a){
        this.a = a;
    }

    public void changeMyVar(int newVar){
        a.setMyvar(newVar);
    }
}

necesitará tener una referencia de una instancia de la clase A y actualizar el valor en la clase B de esta manera:

int initialValue = 2;
int newValue = 3;
A a = new A(initialValue);
B b = new B();
b.passA(a);
b.changeMyVar(newValue);
assertEquals(a.getMyVar(),newValue); // true

Solución

Entonces, mi solución a esto, (incluso si no estoy seguro de si es una buena práctica), es usar un singleton:


public class Globals {
    private static Globals globalsInstance = new Globals();

    public static Globals getInstance() {
        return globalsInstance;
    }

    private int myVar = 2;

    private Globals() {
    }

    public int getMyVar() {
        return myVar;
    }

    public void setMyVar(int myVar) {
        this.myVar = myVar;
    }
}

Ahora puede obtener la instancia única global en cualquier lugar con:

Globals globals = Globals.getInstance();
// and read and write to myVar with the getter and setter like 
int myVar = globals.getMyVar();
global.setMyVar(3);
close