2013-01-14 33 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()。如果这些字符串来自其他地方,并且您知道预期的格式,则可以编写一种方法将字符串转换为类加载程序所期望的格式。

相关问题