1

有没有办法B在进入 class 的main()方法之前强制静态初始化某些类A,而不改变 class A,只使用 VM 选项?

4

2 回答 2

1

我不知道没有代码的任何方法。当然,在代码中很容易。

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);
   }
}

事实上你可以这样做

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

不过,您的要求没有多大意义。问一个关于你试图通过这样做来解决的问题的问题,你会希望得到一个更有用的答案。

于 2014-01-06T14:36:38.893 回答
0

您可以创建一个初始化其他类的类,然后调用真正的 main 方法,例如:

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 });
}

然后,您将使用该类作为主类启动应用程序,并指定真正的主类和要通过属性初始化的类。

于 2014-01-06T21:36:45.633 回答