【问题标题】:Shared variables within subclasses in javajava子类中的共享变量
【发布时间】:2015-01-26 00:44:42
【问题描述】:

我目前有一个父类,它有两个子类,我真正想做的是让它们都继承一个共享变量(浮点数)。我需要在 subclass1 中设置 float 的值,然后在 subclass2 中使用 float 的值。我应该补充一点,这些都是 android 活动,并且 subclass1 位于活动链的开头,而 subclass2 位于该链的末尾,其间的所有活动也是同一个父类的子类。

我目前拥有的类似于以下内容: (我留下了很多其他代码,这只是最基本的)

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();

}

该浮点值永远不会在其他任何地方使用。

这种方法似乎是错误的,我知道,但我不确定如何正确实施。

我正在考虑通过意图传递数据,但正如前面提到的,这两个子类之间没有直接联系,它们之间存在一系列活动,我宁愿不必将这些数据全部串起来以达到结束。

【问题讨论】:

  • 我知道这可能不是一个好习惯,但您可以将值写入文件并在另一个活动中读取。
  • 我看不出这种方法的问题。您有一个静态变量,您可以随时随地访问它,而无需传递给任何活动。或者你的问题可能不够清楚!
  • 同意@NguyenDoanTung。如果您认为拥有静态字段是邪恶的,我建议使用单例数据容器类或使用 SharedPreferences(Android 中最简单的持久存储)来存储和获取值。

标签: java android inheritance subclassing


【解决方案1】:

下面的链接中讨论了常见问题解答。

How do I pass data between Activities/Services within a single application?

理想情况下,由于您想共享 原始数据 类型(浮点数),建议使用 Intent。但由于这不符合您的要求,您可以跳过。

接下来,使用“静态”(您目前正在使用)也可以。您可以从应用程序中的任何其他类访问这些静态字段。

但是,如果你想有一个替代品,那么可以使用“Singleton”类。这是一个设计为只有一个实例的类。

public  class Singleton {
    private static  Singleton INSTANCE ;
 
    private Singleton() {}
 
    public static synchronized Singleton getInstance() {
        if(INSTANCE == null){
            INSTANCE = new Singleton();
        }
        return INSTANCE;
        
    }
}

它有一个静态方法,其名称例如 getInstance() 返回实例;第一次调用此方法时,它会创建全局实例。

例如活动 subclass1 可以检索实例并调用 setValue(0.6);稍后的活动 subclass2 可能会检索实例并调用 getValue() 以检索最后设置的值。

【讨论】:

    【解决方案2】:

    对级联的类要非常小心。 SubClass1onCreate() 调用 super.onCreate(),这是 ActivityParentonCreate()。这可能会引发连锁反应(调用ActivityParent 的意图仍可用于onCreate())。

    【讨论】:

    • 这应该是一条评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2018-08-28
    相关资源
    最近更新 更多