我需要获取由字符串表示的类的类。我试图调用getMethod,我只有它所需类型的字符串列表。
当str是一个简单的类时,Class.forName(str)有效,但是,例如,没有像这样的数组:
Class<?>[] typeClasses = new Class<?>[]{Class.forName("my.type.class[]")};
Method method = someClass.getMethod(methodString, typeClasses);
答案 0 :(得分:0)
获取数组类型的Class
对象的一种方法是在您反射创建的数组实例上调用getClass()
; e.g。
Class someClass = Some.class;
Class someArrayClass = java.reflect.Array.newInstance(someClass, 0).getClass();
您也可以使用Class.forName()
,但需要以内部形式指定班级名称;例如Object[]
的班级名称为"[Ljava.lang.Object;"
。有关类名格式的详细信息,请参阅Class.getName()。
答案 1 :(得分:0)
问题是您在示例中传递的字符串不是该类的正确字符串表示形式。此示例代码运行正常并打印为true:
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 for Class#getName()。如果这些字符串来自其他地方并且您知道期望什么格式,您可以编写一个方法将字符串转换为类加载器所期望的格式。