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()