簡體   English   中英

如何在java中使用反射調用類的main()方法

[英]How to call main() method of a class using reflection in java

當使用反射從另一個main方法調用Java類的main方法時,

Class thisClass = loader.loadClass(packClassName);
Method thisMethod = thisClass.getDeclaredMethod("main",String[].class);

thisMethod.invoke(null, new String[0]);

我應該創建newInstance()還是簡單地調用main(),因為它是靜態的。

對於您聲明的要求(動態調用隨機類的主要方法,使用反射,您有很多不必要的代碼。

  • 您不需要為該類調用構造函數
  • 您不需要內省類字段
  • 由於您正在調用靜態方法,因此您甚至不需要真正的對象來調用該方法

您可以調整以下代碼以滿足您的需求:

try {
    final Class<?> clazz = Class.forName("blue.RandomClass");
    final Method method = clazz.getMethod("main", String[].class);

    final Object[] args = new Object[1];
    args[0] = new String[] { "1", "2"};
    method.invoke(null, args);
} catch (final Exception e) {
    e.printStackTrace();
}

認知答案看起來是正確的; 如果您需要從不在類路徑中的Jar加載,則可以使用URL類加載器

     try {
        URL[] urls;
        URLClassLoader urlLoader;

        urls = ...;

        urlLoader = new URLClassLoader(urls);

        @SuppressWarnings("rawtypes")
        Class runClass = urlLoader.loadClass(classToRun);

        Object[] arguments = new Object[]{args};
        Method mainMethod = runClass.getMethod("main", String[].class);
        mainMethod.invoke(null, arguments);
      } catch (Exception e) {
        e.printStackTrace();
      }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM