-1

可能重复:
Java 中的 Class.getArrayType?

我需要获取由字符串表示的类型的类。我正在尝试调用 getMethod,但我只有它所需类型的字符串列表。

Class.forName(str) 当 str 是一个简单的类时有效,但不是,例如,像这样的数组:

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

2 回答 2

0

获取Class数组类型对象的一种方法是调用getClass()反射创建的数组实例。例如

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

也可以使用Class.forName(),但需要以内部形式指定类名;例如 an 的类名Object[]"[Ljava.lang.Object;"。有关类名格式的详细信息,请参见Class.getName()

于 2013-01-14T04:08:46.180 回答
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));

有关如何将数组类型表示为字符串的示例,请参阅Class#getName()的 Javadoc。如果这些字符串来自其他地方,并且您知道期望的格式,则可以编写一个方法将字符串转换为类加载器期望的格式。

于 2013-01-14T04:15:22.660 回答