我遇到了一个问题: 我有像这样的Url.class
class Url {
public static host = "zh.nurane.otkur.biz";
public static basic_url = host + "/api/v1";
public static addContect = basic_url + "/add";
}
我在另一个类
中使用这个url.addContectclass Foo extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart_layout);
if(somecase){
Url.HOST = "ug.nurane.otkur.biz";
}
System.out.println(Url.addContect + " host =" + Url.HOST);
}
}
来自println我得到了
“zh.nurane.otkur.biz/api/v1/add host = ug.nurane.otkur.biz”
实际上我想要这个结果
“ug.nurane.otkur.biz/api/v1/add host = http://ug.nurane.otkur.biz”
可以这样做吗?谢谢
答案 0 :(得分:0)
首先,您的Url
班级没有HOST
,只有host
。
现在针对您的问题,为什么不改变
此
Url.HOST = "ug.nurane.otkur.biz";
到
Url.HOST = "http://ug.nurane.otkur.biz";
答案 1 :(得分:0)
回答你的问题:是的你可以修改静态变量,但你的问题与静态变量无关。如果你创建一个只保留一些静态变量的类,你可能想让它们 final 并创建两个变量:
public static final HOST_1= "zh.nurane.otkur.biz";
public static final HOST_2= "ug.nurane.otkur.biz";
在您的活动中,检查 somecase 条件并访问您需要的主机。总体上尝试遵循Java编码约定。复合属性名称通过大写每个单词的第一个字符来区分,如下所示:
public basicUrl = host + "/api/v1";
但这听起来更像是一个常数,因此适用以下惯例:
public static final BASIC_URL= host + "/api/v1";
答案 2 :(得分:0)
我想让你正确理解静态是什么。
当您声明任何变量时,静态系统只在静态数据的内存中保留一个变量。与您为该特定类所做的数字对象无关。
在您的情况下,您尝试更改Url.host
的值。系统改变了价值。
但它没有反映出来,因为您之前已将Url.host
的值存储到basic_url
和addContect
。这两个变量已经获得了内存和值编译时间。
这就是为什么您的更改未反映在Url.addContect
。
每次修改静态数据时都必须重新分配每个值。
我希望我已经清除了你的困惑。
请发布您的正确代码。我在宣言中看不到字符串。 应该是。
public static String host = "zh.nurane.otkur.biz";
答案 3 :(得分:0)
在类Url中,添加一个公共静态方法。
public static updateVariablesOnHost(String newHost){
host = newHost;
basic_url = host + "/api/v1";
addContect = basic_url + "/add";
}
调用此方法更新host
,它也应该反映addContent中的更改。
据我了解,您在声明期间只将值写入addContent
一次。更改host
中的值,您希望addContent
也得到更新。嗯,它不会那样工作,因为这些任务只是exec。一旦。您需要创建一个静态方法,将新的host
值传递给该方法,然后根据新的host
重写其他变量。
静态不等同于C / C ++中的MACRO 。您期望的是内联替换代码,这实际上是一个MACRO,并且使用静态将无济于事。