Хммм ... Я м не в состоянии придумать лучшее название для этого вопросастатическое назначение вызова метода дважды
я м не в состоянии понять, почему вызов статического метода и назначая его значение на другое статический член дважды вызывает метод getValue()
.
Если я перемещаю статическое назначение после метода main
, он не загружается дважды. Я знаю, что это глупо, но я пропускаю что-то очевидное?
public class Test {
private static Integer value1 = getValue(); // This is causing to load again
private static Integer flag = null;
public static Integer getValue() {
if (flag != null) { // if flag is loaded already, return it.
return flag;
}
System.out.println("Loading value...");
flag = Integer.valueOf(10);
return flag;
}
public static void main(String[] args) {
getValue();
}
private static Integer value2 = getValue(); // This will not cause to load again
}
Выход:
Loading value...
Loading value...
Тест онлайн: https://ideone.com/pgRbff
Это правильно. OP, вы можете проверить это, заменив объявления 'value1' и' flag' и отметив, что «Загрузка значения ...» печатается только один раз. – Vikram
@Kamal: Это не имеет никакого отношения к порокам статических переменных. Это всего лишь дизайнерский запах. – Makoto
Aaahh .. Я знал, что я здесь глуп ... Как я пропустил ... Моя голова показывает признаки лишенного сна ... lol ... Еще раз спасибо ... – manikanta