【问题标题】:Accessing a variable globally (Java)全局访问变量(Java)
【发布时间】:2012-04-29 17:11:44
【问题描述】:

我正在为 Android 开发一个应用程序,并且有一次用户选择了一个区域,之后应用程序所有部分的内容都会更改。因此我需要在整个程序中访问一个整数。我考虑过一个单例类,但我不知道如何向它添加一个 int、一个 get() 和一个 set()(我希望能够在任何地方阅读并在两个类中写入(到处都很好) ))。

我应该简单地将其声明为全局吗?

这就是我现在要做的,可以吗?

public enum Region {
INSTANCE;
private int rID =0;

public void setRID(int rID) {
    this.rID=rID;

}

public int getRID()
{
    return rID;
}

}

使用

访问
Region.INSTANCE.setRID(5);

【问题讨论】:

  • 您有两个选择:A) 单例。您可以在 SO 和网络上找到大量示例。这最好在 Java 中使用Enum 完成。 B) 依赖注入。这是首选。您应该简单地将这些信息传递给对象的构造函数

标签: java android static enums singleton


【解决方案1】:

试试类似的东西

public class State
{
     static State instance = new State ();
     public static State getInstance() { return instance; }

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

不要忘记在应用程序退出时存储您的值,并在重新加载时恢复它。

【讨论】:

  • 我想这是另一个问题,但是当应用程序关闭时是否有可能运行方法?
【解决方案2】:

这不是一个真正的 Singleton,而是一个静态类。包含静态字段(未绑定到实例的字段)的类:

public class StaticClass {

    private static int value;

    private Singleton () {}

    public static int getValue () {
       return value;
    }
    public static void setValue (int val) {
       value = val;
    }

}

您可以通过StaticClass.getValue() 访问该值并通过StaticClass.getValue(4) 设置该值。 ('StaticClass 不能被对象替换)。

私有构造函数可防止意外创建实例。

【讨论】:

  • 这是一个全局变量。我不明白为什么这不能解决 OP 的问题。
  • 更好,但仍然不是线程安全的。 Java 中的单例最好使用Enum 来实现。
  • 这不是单例。如果静态变量的管理方式需要改变,则以后更难更改静态变量。见:oodesign.com/singleton-pattern.html
  • 为什么不声明类静态?用户不会像这样创建类的实例。
  • 如果不将volatile 与您的原语一起使用,您可能会冒着线程具有缓存副本而看不到更改的风险。
【解决方案3】:

创建一个公共静态类并将setter和getter声明为public。

【讨论】:

    【解决方案4】:

    我选择了一个枚举:

    public enum Region {
    INSTANCE;
    private int rID =0;
    
        public void setRID(int rID)
        {
            this.rID=rID;
    
        }
    
        public int getRID()
        {
            return rID;
        }
    }
    

    我使用的访问权限

    Region.INSTANCE.getRID();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      相关资源
      最近更新 更多