2013-01-14 31 views
0

可能重複:
Class.getArrayType in Java?如何找到一個字符串描述類在Java中

我需要得到類由字符串表示的類型。我正在嘗試調用getMethod,並且只有它需要的類型的字符串列表。

的Class.forName(STR)的工作原理時str是一個簡單的類,而不是,例如,以與陣列像這樣:

Class<?>[] typeClasses = new Class<?>[]{Class.forName("my.type.class[]")}; 
Method method = someClass.getMethod(methodString, typeClasses); 
+0

什麼是'getMethod(...)'的成員?代碼片段中是否存在靜態導入或靜態方法定義? –

+0

您試圖調用的Method的簽名是什麼? –

+0

對不起 - 我編輯了getMethod來包含一個類對象。 – pinecone

回答

0

一種方式來獲得Class對象的保持用於陣列型在您創建的數組實例上調用getClass();例如

Class someClass = Some.class; 
Class someArrayClass = java.reflect.Array.newInstance(someClass, 0).getClass(); 

您也可以使用Class.forName()但您需要指定內部窗體中的類名;例如Object[]的類名是"[Ljava.lang.Object;"。有關類名稱格式的詳細信息,請參見Class.getName()

+0

謝謝 - 但我只有一個描述類型的字符串,例如「String []」。 – pinecone

+0

那麼你將需要解析它來提取基類型名稱,將其轉換爲完全限定名稱,然後使用我的答案中的一種方法。我會爲你編碼...但有人彎曲我的勺子。 –

+0

你的第二種方法適用於我。我可以使用[L符號。謝謝! – pinecone

0

問題是您在示例中傳遞的字符串不是該類的正確字符串表示形式。本實施例中的代碼運行正常,並打印真:

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()。如果這些字符串來自其他地方,並且您知道預期的格式,則可以編寫一種方法將字符串轉換爲類加載程序所期望的格式。

相關問題