從我的應用程序中的幾個類我想獲得字符串全局值而不使用Context
。 如果我在Application
類,SharedPreferences
或Strings.xml
中聲明這個變量,那麼我必須使用Context
來獲取/設置它的值。如何在不使用上下文的情況下聲明全局變量?
使用單身人士不是一個好的做法,因爲我從this post瞭解。 沒有使用全局變量而不使用context
的好方法嗎?
從我的應用程序中的幾個類我想獲得字符串全局值而不使用Context
。 如果我在Application
類,SharedPreferences
或Strings.xml
中聲明這個變量,那麼我必須使用Context
來獲取/設置它的值。如何在不使用上下文的情況下聲明全局變量?
使用單身人士不是一個好的做法,因爲我從this post瞭解。 沒有使用全局變量而不使用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的很多事情。如果你使用枚舉,那會更好。希望這可以幫助。
UPDATE
如果你想使用getter和setter方法,然後有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)。
將值存儲在strings.xml文件中。然後像這樣稱呼它。
String yourString = Context.getResources().getString(R.string.your_string);
他說他不想使用上下文,而'Context.getResources()'是無效的,因爲這不是一個靜態方法。 – MByD
「非靜態方法getResources()不能從靜態上下文中引用」 – Sviatoslav
調用getApplicationContext()或getBaseContext() – JakeWilson801
NIKE,REBOK和ADDIDAS在你的例子中是常量。但我正在談論變量......我必須有機會獲得/設置它的價值。 – Sviatoslav
我會爲你更新我的解決方案。 – jjNford