Java не может получить значение статической переменной из того же класса

У меня есть 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 является частным, поэтому у меня есть его публичный получатель / установщик. Когда я устанавливаю его значение из другого класса с помощью его метода установки AppConstants.setMidFixApi("value"); и получить его значение из его метода получения AppConstants.getMidFixApi(); До сих пор все хорошо
Но
Проблема возникает, когда после вышеупомянутых строк я вызываю статическую переменную API_CALL показано в коде выше, что получить значение из получателя переменной MID_FIX_API и вернуть 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 ответа

Решение

Как уже упоминалось, переменная API_CALL инициализируется один раз, с текущим значением MID_FIX_API который изначально является нулевым.

Обходной путь заключается в создании статического метода (getApiCall()), который просто вычисляет значение, которое ранее было статически инициализировано, что выглядело бы так просто:

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

Который затем можно легко назвать AppConstants.getApiCall(),

Это связано с порядком инициализации. Когда вы звоните AppConstants.setMidFixApi("getCategories") класс AppConstants будет инициализирован до установки значения. Следовательно, когда API_CALL инициализируется, MID_FIX_API еще не назначен...

Другие вопросы по тегам