修改java中类的静态成员

时间:2014-08-26 04:37:27

标签: java android

我遇到了一个问题: 我有像这样的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.addContect
class 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

可以这样做吗?谢谢

4 个答案:

答案 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_urladdContect。这两个变量已经获得了内存和值编译时间。

这就是为什么您的更改未反映在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,并且使用静态将无济于事。