我有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);
}
答案 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...*/);
}
请参阅上面的“下面的注释”:您传递的参数invoke
是Object[]
(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
方法,只需遍历所述数组并调用该方法。