java 无法从同一个 class 获取静态变量的值
java unable to get value of static variable from the same class
我有一个 AppConstants
class,其中有一些静态变量和静态方法。变量如
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
是私有的,所以我有它的 public getter/setter。
当我通过它的 setter 方法 AppConstants.setMidFixApi("value");
从另一个 class 设置它的值并从它的 getter 方法 AppConstants.getMidFixApi();
获取它的值时,到现在为止一切都很好
但是
问题出现在上面几行之后,我调用上面代码中显示的静态变量 API_CALL
从变量 MID_FIX_API
和 return 的 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
请指出我做错了什么。
这与初始化顺序有关。当您调用 AppConstants.setMidFixApi("getCategories")
时,AppConstants class 将在 设置值之前被初始化 。因此,当 API_CALL
初始化时, MID_FIX_API
尚未分配...
如前所述,变量 API_CALL
被初始化一次,初始值为 null 的 MID_FIX_API
当前值。
一个解决方法是创建一个静态方法 (getApiCall()
),它只计算之前静态初始化的值,这看起来就像这样简单:
public static String getApiCall(){
return BASE_URL + getMidFixApi() + "/" + GET_KEY(appContext, KEY_FOR_KEY);
}
然后可以很容易地调用它 AppConstants.getApiCall()
。
我有一个 AppConstants
class,其中有一些静态变量和静态方法。变量如
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
是私有的,所以我有它的 public getter/setter。
当我通过它的 setter 方法 AppConstants.setMidFixApi("value");
从另一个 class 设置它的值并从它的 getter 方法 AppConstants.getMidFixApi();
获取它的值时,到现在为止一切都很好
但是
问题出现在上面几行之后,我调用上面代码中显示的静态变量 API_CALL
从变量 MID_FIX_API
和 return 的 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
请指出我做错了什么。
这与初始化顺序有关。当您调用 AppConstants.setMidFixApi("getCategories")
时,AppConstants class 将在 设置值之前被初始化 。因此,当 API_CALL
初始化时, MID_FIX_API
尚未分配...
如前所述,变量 API_CALL
被初始化一次,初始值为 null 的 MID_FIX_API
当前值。
一个解决方法是创建一个静态方法 (getApiCall()
),它只计算之前静态初始化的值,这看起来就像这样简单:
public static String getApiCall(){
return BASE_URL + getMidFixApi() + "/" + GET_KEY(appContext, KEY_FOR_KEY);
}
然后可以很容易地调用它 AppConstants.getApiCall()
。