У меня есть класс Java, который выглядит следующим образом:
public class My_ABC
{
int a=0;
boolean B=true;
static // Initialize and load existing data only once at start-up
{
// need to know if it's called from its own main()
// or by another class to conditionally set veriables
}
public My_ABC(int AA,boolean BB)
{
}
public static void main(String[] args)
{
My_ABC my_abc = new My_ABC(3,true);
}
}
Поскольку статический блок запускается при загрузке класса, как я могу определить, вызывается ли он из своего собственного main()
или из другого класса для условно установленных переменных?
Я понимаю, когда некоторые из вас говорили: "Раздаются все виды колоколов!" Ну, это потому, что у меня возникла ситуация: я разрабатываю класс, который должен загружать много данных до предела моего ПК (4G Ram), и я использую 32-битную версию Java, которая может использовать только 1.5G Ram Max; поэтому, когда я тестирую этот класс сам по себе, мне нужно загрузить как можно больше данных, чтобы протестировать все возможные ситуации, но когда он вызывается из нескольких других классов, он не может этого сделать (приведет к ошибке из-за недостатка пространства в куче), поэтому он должен загружать только мин. данные необходимы. И все же, поскольку все данные должны загружаться только один раз при запуске, они должны находиться в статическом блоке; в противном случае мне нужно реализовать дополнительную логику, чтобы определить, загружается ли он в первый раз (нужно загружать данные) или во 2-й, 3-й раз (не следует загружать данные снова и снова). И если я реализую дополнительную логику для этого и переместу код загрузки данных из статического блока, это вызовет ненужную сложность, потому что если я перейду на 64-битную версию Java (надеюсь, скоро), эта дополнительная сложность будет дополнительной нагрузкой У меня будет достаточно места для загрузки всех данных даже при вызове из других классов). Поэтому временное быстрое решение состоит в том, чтобы обнаружить его в статическом блоке и соответственно обработать разницу, когда у меня будет достаточно места, просто закомментируйте их без необходимости изменения логической структуры программирования.
Спасибо за все ответы и советы, я попробовал подход "StackTraceElement", он прекрасно работает! Это решило мою проблему.