Геттеры возвращают ноль

Я знаю, почему возникает моя проблема, но я не знаю, как с ней бороться.

Итак, у меня есть 3 класса, 1 из них содержит мои методы получения и установки. В одном классе я устанавливаю значения, в другом я получаю значения. Когда я получаю значения, они возвращаются нулевые. Это очевидно, потому что два экземпляра объекта получения / установки, которые я создал в классах, отделены друг от друга. Я пытаюсь выяснить, как я могу установить значения в одном классе и получить их в другом, не имея двух отдельных экземпляров класса getter/setter. Моя формулировка ужасна, поэтому вот более наглядное объяснение:

1 класс

Encapsulation encap = new Encapsulation();
encap.setValue(10);

Класс 2

Encapsulation encap = new Encapsulation();
encap.getValue(); //I want this to return 10

Класс 3 (Инкапсуляция)

private int value;

public void setValue(int value){
    this.value = value;
}

public int getValue(){
    return value
}

3 ответа

Решение

В Class2 вы создаете новый экземпляр класса Encapsulation. (Обратите внимание на новую инкапсуляцию ()). Очевидно, что это не будет содержать значения.

Вместо этого я бы предложил вам два решения:

Первый:

Сохраните этот объект в классе приложения, когда вы работаете над приложением Android.

public class TestApplication extends Application {
    public Encapsulation tempClass;
    public TestApplication () {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate() { 
        // TODO Auto-generated method stub
        super.onCreate();
    }

    public Encapsulation getTempClass() {
        return tempClass;
    }

    public void setTempClass(Encapsulation tempClass) {
        this.tempClass  = tempClass;
    }
}

Теперь в вашей деятельности:

//after setContentView
testAppObj = (TestApplication) getApplication();
testAppObj.setTempClass(myTempClassObj);

//retrieve as:
Encapsulation obj = testAppObj.getTempClass();

Вы должны зарегистрировать свой класс Application в файле манифеста так же, как вы регистрируете свои действия:

<application
        android:name="com.pkg.test.TestApplication " />

Во-вторых:

Сохраняйте объект encap как статический в Class1. Таким образом, вы можете получить к нему доступ из calss2. (Я не предпочитаю статический.)

Надеюсь, поможет.

Сделать значение статическим, оно будет одинаковым для всех Encapsulation экземпляры

private static int value;

public void setValue(int aValue){
    value = aValue;
}

public int getValue(){
    return value;
}

Просто объявите объект класса Encapsulation один раз и используйте один и тот же экземпляр для вызова метода получения и установки.

Как это:

Encapsulation encap = new Encapsulation();
encap.setValue(10);
encap.getValue();

Оно работает.

Другие вопросы по тегам