簡體   English   中英

在數組中存儲類

[英]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

(調用invokenull是要在其上調用該方法的實例;由於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.

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