[英]Storing Class in Array
我有n個類(Class1,Class2,..,Classn),每個類都有一個靜態的main方法。
我希望將此類存儲在數組中,並為每個類調用一次main方法。 但是我必須為該數組聲明的類型是什么?
根據TJ Crowder的回復,這是我最終完成的操作
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);
}
類型為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
(調用invoke
的null
是要在其上調用該方法的實例;由於main
是靜態的,因此我們為此提供了null
。)
Java(以及大多數靜態類型的語言)中的數組一次只能存儲一種類型。 如果所有類都擴展同一個超類,則可以聲明一個可以存儲所有這些類的數組,如下所示:
SuperClass[] array = new Superclass[];
另外,如果實際上不是(Class1,Class2,...,Classn),而是(object1,object2,...,objectn),其中每個對象都是SomeClass
類的實例,則僅是:
SomeClass[] array = new SomeClass[];
至於在每個方法上調用main
方法,只需遍歷所述數組並調用該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.