Передача значений между классами - Java

346
06 июля 2018, 20:30

Подскажите, как грамотно реализовать передачу данных между классами.

В классе А есть переменная, также для этой переменной есть get и set, именно в этом классе нужно установить переменной variable значение 5.

class A {
    int variable;
    public A() {
        setVariable(5);
    }
    public void setVariable(int variable) {
        this.variable = variable;
    }
    public int getVariable() {
        return variable;
    }
}

Далее, есть класс В, в котором есть метод returnVariable где нужно получить значение переменной variable и вывести на экран.

class B {
    void returnVariable() {
        A a = new A();
        System.out.println(a.getVariable());
    }
}

Я знаю что при new A(); создается новая ячейка в памяти, и getVariable() как бы равен 0 или null. Но есть я устанавливаю int static variable; то результат выводит: 5. Скажите, как можно обойтись без статических полей в данном случае?

Answer 1

Чтобы реализовать передачу данных между классами, вам нужно передать ссылку на первый класс второму. Вы это можете сделать в конструкторе класса B. То есть создать конструктор с параметрами, в которых передается ссылка.

public B(A a){
    public B(A a){
    System.out.println(a.getVariable());
    }
    }

Вы также можете создать конструктор с параметрами у класса A. Для того, чтобы сразу, при создании класса устанавливать переменной новое значение. Вот пример кода, который я для вас написал. Класс A:

package setVarClass;
/**
 *
 * @author vvm
 */
public class A {
    int variable;
    public A() {
        setVariable(5);
    }
    // конструктор с параметрами
    public A(int var){
    this.variable = var;
    }
    public void setVariable(int variable) {
        this.variable = variable;
    }
    public int getVariable() {
        return variable;
    }
}

Класс B:

package setVarClass;
/**
 *
 * @author vvm
 */
public class B {
    public B(){}
    public B(A a){
    System.out.println(a.getVariable());
    }
    void returnVariable() {
        A a = new A(); // тут создается экземпляр класса A
        System.out.println(a.getVariable());
    }
}

Класс для тестирования:

package setVarClass;
/**
 *
 * @author vvm
 */
public class TestVarInClass {
    public static void main(String[] args) {
       //  можно не создавать A потому как А создается в конструкторе B();
       // A a= new A();// тут вызываем конструктор без праметром
       // и переменной присваивается хначение по умолчанию = 5
       B b = new B();
       b.returnVariable(); // выводит значение переменной
       A acon = new A(80);
       B b1 = new B(acon);// тут выведет 80
    }
}

Строка A a = new A(); // тут создается экземпляр класса A в методе класса void returnVariable() лишняя. Теперь вы можете обойтись без неё. Но в этом случае вы должны передать ссылку на класс в методе returnVariable(), как я это сделал в конструкторе.

READ ALSO
Checked Exception and Unchecked Exception

Checked Exception and Unchecked Exception

Объясните пожалуйста в чем разница между checked Exception и unchecked Exception если обе их можно пойматьдайте пример если не сложно

265
Задержка выполнения кода

Задержка выполнения кода

Есть вот такая часть кода

220
Java структура дженериков

Java структура дженериков

Собственно, можно ли в java прописать что то подобное?

227