csd*_*cac 2 java null android encapsulation
我知道为什么会出现我的问题,但不确定如何处理。
因此,我有3个班级,其中1个班级是我的getters和setters。在一个类中,我正在设置值,在另一类中,我正在获取值。当我获得值时,它们将返回null。显然,这是因为我在类中创建的getter / setter对象的两个实例是相互独立的。我试图找出的是如何在一个类中设置值并在另一个类中获取它们,而又没有getter / setter类的两个单独实例。我的措辞很糟糕,所以这里有一个更直观的解释:
1类
Encapsulation encap = new Encapsulation();
encap.setValue(10);
Run Code Online (Sandbox Code Playgroud)
2级
Encapsulation encap = new Encapsulation();
encap.getValue(); //I want this to return 10
Run Code Online (Sandbox Code Playgroud)
3类(封装)
private int value;
public void setValue(int value){
this.value = value;
}
public int getValue(){
return value
}
Run Code Online (Sandbox Code Playgroud)
在Class2中,您正在创建类Encapsulation的新实例。(注意new 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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在您的活动中:
//after setContentView
testAppObj = (TestApplication) getApplication();
testAppObj.setTempClass(myTempClassObj);
//retrieve as:
Encapsulation obj = testAppObj.getTempClass();
Run Code Online (Sandbox Code Playgroud)
您必须在清单文件中注册Application类,就像注册活动一样:
<application
android:name="com.pkg.test.TestApplication " />
Run Code Online (Sandbox Code Playgroud)
第二:
在Class1中,保持对象封装为静态。因此,您可以从calss2访问它。(我不喜欢静态的。)
希望能帮助到你。