在数组中存储类

时间:2014-03-10 11:15:26

标签: java

我有n类(Class1,Class2,..,Classn),每个都有一个静态主方法。

我希望将这个类存储在一个数组中,并为每个类调用一次main方法。 但是我要为这个数组申报的类型是什么?

这是我最后根据T.J的回复所做的。克劳德

ArrayList<Class> meoa = new ArrayList(
                    Arrays.asList(Class.forName("mypackage.Class1"),
                            Class.forName("mypackage.Class2"),
                            Class.forName("mypackage.Class3"),
                            Class.forName("mypackage.Class4"),
                            Class.forName("mypackage.Class5")));    


          for(Class cls:meoa) {
              System.out.println("Invoking:"+cls.getName());
              Method m = cls.getDeclaredMethod("main", String[].class);
              Object[] arg = new Object[1];                  
              arg[0] = new String[] {};
              m.invoke(null, arg);
          }

2 个答案:

答案 0 :(得分:4)

类型为Class[]Class数组)。 (由于main是一个静态方法,我们无法真正使用接口。)

当您准备致电main时,您可以通过反思来做到这一点,例如:

Class[] classes = /*...create and fill in the array...*/;
for (Class cls : classes) {
    // Look up the main method accepting an array of strings
    Method m = cls.getDeclaredMethod("main", String[].class);
    m.invoke(null, /*...see note below...*/);
}

请参阅上面的“下面的注释”:您传递的参数invokeObject[]Object数组),其中包含要提供main的参数。由于main需要单个参数(字符串数组),因此必须将单个条目Object[]传递给其中,其中一个条目为String[]。例如,如果您要将["one", "two", "three"]传递给main,则可以像这样构造invoke参数:

Object[] arg = new Object[1];                    // Room for one argument
arg[0] = new String[] { "one", "two", "three" }; // That one arg is a String array
m.invoke(null, arg);                             // Invoke main

null调用中的invoke用于调用方法的实例;由于main是静态的,我们为此提供null。)

答案 1 :(得分:0)

Java中的数组(以及大多数静态类型语言)一次只能存储一种类型。如果类都扩展了相同的超类,那么您可以声明一个可以存储所有这些类的数组,如下所示:

SuperClass[] array = new Superclass[];

或者,如果你实际上并不是指(Class1,Class2,...,Classn)而是(object1,object2,...,objectn),其中每个对象都是某个类SomeClass的实例那就是:

SomeClass[] array = new SomeClass[];

至于在每个上调用main方法,只需遍历所述数组并调用该方法。