我目前有一个父类,它有两个子类,我基本上想要做的是让它们都继承一个共享变量(一个 float )。我需要在subclass1中设置float的值,然后在subclass2中使用float的值。我应该补充一点,这些都是 android Activity ,子类 1 位于 Activity 链的开头,子类 2 位于该链的末尾,中间的所有 Activity 也是同一父类的子 Activity 。
我目前拥有的是类似于以下内容的内容: (我留下了很多其他代码,这只是骨架)
class activityParent extends Activity{
public static float value;
public void setValue(){
//grab the value from phone (ill leave this code out and will hardcode a value below as an example)
value = 0.6f;
}
public void useValue(){
//where i use the value in another function here
otherFuncion(value);
}
}
class subclass1 extends activityParent
{
@Override
public void onCreate(Bundle bundle){
setValue();//need this to be initialized first
super.onCreate(bundle);
}
}
class subclass2 extends activityParent{
//some previous code here
//i need to use the value just before the activity finishes
useValue();
finish();
}
该浮点值从未在其他任何地方使用。
这种方法似乎是错误的,我知道,但我不确定如何正确地实现它。
我正在考虑通过 Intent 传递数据,但正如所提到的,这两个子类彼此之间没有直接联系,它们之间存在一系列 Activity ,我宁愿不必将这些数据全部串起来以达到结束。
最佳答案
下面的链接中讨论了常见问题。
How do I pass data between Activities/Services within a single application?
理想情况下,由于您要共享原始数据 类型( float ),建议使用Intent。但由于这不符合您的要求,您可以跳过此部分。
接下来,使用“static”(您目前正在做的)也可以。您可以从应用程序中的任何其他类访问这些静态字段。
但是,如果你想有一个替代品,那么可以使用“Singleton”类。这是一个设计为只有一个实例的类。
public class Singleton {
private static Singleton INSTANCE ;
private Singleton() {}
public static synchronized Singleton getInstance() {
if(INSTANCE == null){
INSTANCE = new Singleton();
}
return INSTANCE;
}
}
它有一个名为 getInstance() 的静态方法,它返回实例;第一次调用此方法时,它会创建全局实例。
例如, Activity 子类 1 可能会检索实例并调用 setValue(0.6);稍后的 Activity 子类 2 可能会检索实例并调用 getValue() 以检索最后设置的值。
关于java - java子类中的共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143338/