문제

Is there any way to force static initialization of some class B before entering the main() method of class A, without changing class A, using only VM options?

도움이 되었습니까?

해결책 2

you could create a class that initializes other classes and then calls the real main method, e.g:

public static void main(String[] args) throws Exception {
    Class<?> mainClass = Class.forName(System.getProperty("mainClass"));

    for (String className : System.getProperty("initClasses").split(";")) {
        Class.forName(className);
    }

    Method main = mainClass.getMethod("main", String[].class);
    main.invoke(null, new Object[] { args });
}

Then you would start the application with that class as the main class and specify the real main class and the classes to be initialized via properties.

다른 팁

I'm not aware of any way to do it without code. In code it's easy of course.

public class C {
   static {
      // Fetch and throw away an instance of B to make sure it is loaded
      B.getInstance();
   }

   static void main(String[] args) {
      // Do stuff, B is initialized
      A.main(args);
   }
}

In fact you could just do

public class C {
   static void main(String[] args) {
      B.getInstance();
      A.main(args);
   }
}

Your request doesn't make a lot of sense though. Ask a question about the problem you are trying to solve by doing this and you will hopefully get a much more useful answer.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top