我需要获取由字符串表示的类型的类。我正在尝试调用 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()
,但需要以内部形式指定类名;例如 an 的类名Object[]
是"[Ljava.lang.Object;"
。有关类名格式的详细信息,请参见Class.getName()。
问题是您在示例中传递的字符串不是该类的正确字符串表示形式。此示例代码运行良好并打印为 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));
有关如何将数组类型表示为字符串的示例,请参阅Class#getName()的 Javadoc。如果这些字符串来自其他地方,并且您知道期望的格式,则可以编写一个方法将字符串转换为类加载器期望的格式。