0

从我的应用程序中的几个类中,我想在不使用Context. Application如果我在类中声明这个变量,SharedPreferences或者Strings.xml,那么我必须使用Context它来获取/设置它的值。

正如我从这篇文章中了解到的那样,使用Singleton并不是一个好习惯。有没有使用全局变量而不使用的好方法?context

4

2 回答 2

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 和 getter,那么有两种解决方案:

  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;
        }
    }
    

或者使用良好的封装实践并执行以下操作:

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;
    }
}

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

于 2012-05-06T23:29:18.047 回答
0

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

 String yourString = Context.getResources().getString(R.string.your_string);
于 2012-05-06T23:30:51.753 回答