Getters返回null

时间:2014-10-10 12:23:52

标签: java android null encapsulation

我知道为什么我的问题正在发生,但我不确定如何处理它。

所以我有3个课程,其中1个课程包括我的课程和课程。 setter方法。在一个班级中我设置了值,在另一个班级中我得到了值。当我得到值时,它们返回null。这显然是因为我在类中创建的getter / setter对象的两个实例彼此分开。我想要找出的是我如何在一个类中设置值并将它们放在另一个类中,而没有两个单独的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 个答案:

答案 0 :(得分:4)

在Class2中,您正在创建类Encapsulation的新实例。 (注意新的Encapsulation())。很明显,这不会保持价值。

相反,我会建议你两个解决方案:

首先:

在处理Android应用程序时,将该对象保存在Application类中。

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 " />

<强>第二

在Class1中将对象封装保持为静态。所以你可以从calss2访问它。 (我不喜欢静电。)

希望它有所帮助。

答案 1 :(得分:3)

使值静态,它将在所有Encapsulation个实例中保持相同的值

private static int value;

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

public int getValue(){
    return value;
}

答案 2 :(得分:0)

只需声明一次Encapsulation类的对象,并使用相同的实例来调用getter和setter。

像这样:

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

有效。