如何在不使用上下文的情况下声明全局变量?

时间:2012-05-06 23:09:51

标签: android

从我的应用程序中的几个类中,我希望在不使用Context的情况下获取String全局值。 如果我在Application类,SharedPreferencesStrings.xml中声明此变量,那么我必须使用Context来获取/设置它的值。

使用 Singleton 并不是一个很好的做法,因为我从this post了解到这一点。 有没有使用全局变量的好方法而不使用context

2 个答案:

答案 0 :(得分:0)

创建一个全局类或将字符串存储在“有意义”的位置。例如,如果你有类鞋,你可以这样做:

public class Shoes {

    public static class BRAND {
        public static final String NIKE = "nike";
        public static final String REBOK = "rebok";
        public static final String ADDIDAS = "addidas";
    }

    private String brand;

    public Shoes() {}

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getBrand() {
        return this.brand;
    }
}

现在你可以这样做:

public static void main(String[] args) {

    Shoes myShoes = new Shoes();
    myShoes.setBrand(Shoes.BRAND.NIKE);
}

你会发现Android中有很多这样的东西。如果你使用枚举,那会更好。希望这会有所帮助。

<强>更新

如果您想使用setter和getters,那么有两种解决方案:

  1. 首先你需要一个对象的实例,因为你只需要一个实例就需要一个单独的设计模式。真的,如果你正确同步,设计有意义,它们可以非常好用。在你的情况下,我不认为这是值得的工作。
  2. 您可以利用静态初始化程序和静态方法。您可以删除最终声明并使用字符串执行您想要的操作,如下所示:

    public class Shoes {
    
        public static class BRAND {
            public static String NIKE;
            public static String REBOK;
            public static String ADDIDAS;
    
            static {
                NIKE = "nike";
                REBOK = "rebok";
                ADDIDAS = "addidas";
            }
        }
    
        private String brand;
    
        public Shoes() {}
    
        public void setBrand(String brand) {
            this.brand = brand;
        }
    
        public String getBrand() {
            return this.brand;
        }
    }
    
  3. 或使用良好的封装实践并执行此操作:

    public class Shoes {
    
        public static class BRAND {
            private static String NIKE;
            private static String REBOK;
            private static String ADDIDAS;
    
            static {
                NIKE = "nike";
                REBOK = "rebok";
                ADDIDAS = "addidas";
            }
    
            public static String getNIKE() {
                return NIKE;
            }
    
            public static void setNIKE(String name) {
                NIKE = name;
            }
    
            public static String getREBOK() {
                return REBOK;
            }
    
            public static void setREBOK(String name) {
                REBOK = name;
            }
    
            public static String getADDIDAS() {
                return ADDIDAS;
            }
    
            public static void setADDIDAS(String name) {
                ADDIDAS = name;
            }
        }
    
        private String brand;
    
        public Shoes() {}
    
        public void setBrand(String brand) {
            this.brand = brand;
        }
    
        public String getBrand() {
            return this.brand;
        }
    }
    

    但是我必须注意:如果你这样做是因为你无法获得一个上下文,那么你就会遗漏一些东西。可以从任何地方获得上下文 - 由系统实例化的对象被赋予上下文作为参数。如果你有自己的自定义对象,你可以使用对象本身(this)将ApplicationContext作为参数或类传递。

答案 1 :(得分:0)

将值存储在strings.xml文件中。然后这样称呼它。

 String yourString = Context.getResources().getString(R.string.your_string);