如何在Java中找到字符串描述的类

时间:2013-01-14 03:55:22

标签: java types getmethod

  

可能重复:
  Class.getArrayType in Java?

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

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

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

2 个答案:

答案 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()。如果这些字符串来自其他地方并且您知道期望什么格式,您可以编写一个方法将字符串转换为类加载器所期望的格式。