从我的应用程序中的几个类中,我想在不使用Context
. Application
如果我在类中声明这个变量,SharedPreferences
或者Strings.xml
,那么我必须使用Context
它来获取/设置它的值。
正如我从这篇文章中了解到的那样,使用Singleton并不是一个好习惯。有没有使用全局变量而不使用的好方法?context
创建一个全局类或将字符串存储在“有意义”的地方。例如,如果你有鞋类,你可以这样做:
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,那么有两种解决方案:
您可以利用静态初始化程序和静态方法。您可以删除最终声明并使用字符串执行您想要的操作,如下所示:
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)的类传递。
将值存储在您的 strings.xml 文件中。然后这样称呼它。
String yourString = Context.getResources().getString(R.string.your_string);