我需要得到類由字符串表示的類型。我正在嘗試調用getMethod,並且只有它需要的類型的字符串列表。
的Class.forName(STR)的工作原理時str是一個簡單的類,而不是,例如,以與陣列像這樣:
Class<?>[] typeClasses = new Class<?>[]{Class.forName("my.type.class[]")};
Method method = someClass.getMethod(methodString, typeClasses);
我需要得到類由字符串表示的類型。我正在嘗試調用getMethod,並且只有它需要的類型的字符串列表。
的Class.forName(STR)的工作原理時str是一個簡單的類,而不是,例如,以與陣列像這樣:
Class<?>[] typeClasses = new Class<?>[]{Class.forName("my.type.class[]")};
Method method = someClass.getMethod(methodString, typeClasses);
一種方式來獲得Class
對象的保持用於陣列型在您創建的數組實例上調用getClass()
;例如
Class someClass = Some.class;
Class someArrayClass = java.reflect.Array.newInstance(someClass, 0).getClass();
您也可以使用Class.forName()
但您需要指定內部窗體中的類名;例如Object[]
的類名是"[Ljava.lang.Object;"
。有關類名稱格式的詳細信息,請參見Class.getName()。
問題是您在示例中傳遞的字符串不是該類的正確字符串表示形式。本實施例中的代碼運行正常,並打印真:
String[] array = new String[] { "hello" };
Class<?> arrayClass = array.getClass();
String stringClass = arrayClass.getName();
Class<?> parsedClass;
try {
parsedClass = Class.forName(stringClass);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
System.out.println(arrayClass.equals(parsedClass));
關於如何表示數組類型爲字符串的例子見的Javadoc Class#getName()。如果這些字符串來自其他地方,並且您知道預期的格式,則可以編寫一種方法將字符串轉換爲類加載程序所期望的格式。
什麼是'getMethod(...)'的成員?代碼片段中是否存在靜態導入或靜態方法定義? –
您試圖調用的Method的簽名是什麼? –
對不起 - 我編輯了getMethod來包含一個類對象。 – pinecone