我需要得到类由字符串表示的类型。我正在尝试调用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