java无法从同一个类获取静态变量的值

时间:2017-10-30 09:54:33

标签: java android static constants static-methods

我有一个AppConstants类,我有一些静态变量和静态方法。变量如

public static final String BASE_URL = "http://www.somevalue.com/api/";
private static String MID_FIX_API;
public static final String API_CALL = BASE_URL + getMidFixApi() + "/" + GET_KEY(appContext, KEY_FOR_KEY);

因为MID_FIX_API是私有的所以我有它的公共getter / setter。 当我通过其setter方法AppConstants.setMidFixApi("value");从另一个类设置其值并从其getter方法获取其值AppConstants.getMidFixApi();一切都很好,直到现在为止 的
问题出现在上面的行之后,我调用上面代码中显示的静态变量API_CALL,它从变量MID_FIX_API的getter获取值,并返回null,尽管我们之前已经传递了值。

这是整个行序列

AppConstants.setMidFixApi("getCategories");   // setting value
Log.e("InsideSuccess", "MID_FIX_API = " + AppConstants.getMidFixApi());  // working fine till here

Log.e("InsideSuccess", "API_URL = "+AppConstants.API_CALL);   // here I'm getting like this http://www.somevalue.com/api/null/somePostFix

请指出我做错了什么。

2 个答案:

答案 0 :(得分:1)

这与初始化顺序有关。当您调用AppConstants.setMidFixApi("getCategories")时,将在设置值之前初始化 AppConstants类。因此,当初始化API_CALL时,尚未分配MID_FIX_API ...

答案 1 :(得分:1)

如上所述,变量API_CALL初始化一次,当前值MID_FIX_API最初为空。

解决方法是创建一个静态方法(getApiCall()),它只计算早先静态初始化的值,这看起来就像这样简单:

public static String getApiCall(){
    return BASE_URL + getMidFixApi() + "/" + GET_KEY(appContext, KEY_FOR_KEY);
}

然后可以轻松地调用AppConstants.getApiCall()