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
еще не назначен...