【问题标题】:How to find the class a string describes in Java [duplicate]如何在Java中找到字符串描述的类[重复]
【发布时间】:2012-12-28 02:26:05
【问题描述】:

可能重复:
Class.getArrayType in Java?

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

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

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

【问题讨论】:

  • getMethod(...) 是什么成员?代码 sn-p 中是否缺少静态导入或静态方法定义?
  • 您尝试调用的 Method 的签名是什么?
  • 抱歉——我已经编辑了 getMethod 以包含一个类对象。
  • @Priyank-- 一个例子是 public static void myMethod(String[] myString)

标签: java types getmethod


【解决方案1】:

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

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

您也可以使用Class.forName(),但您需要以内部形式指定类名;例如Object[] 的类名是 "[Ljava.lang.Object;"。类名格式详见Class.getName()

【讨论】:

  • 谢谢——但我只有一个描述类型的字符串,例如“String[]”。
  • 那么您将需要解析它以提取基本类型名称,将其转换为完全限定名称,然后使用我的答案中的一种方法。我会为你编写代码……但有人把我的勺子弄弯了。
  • 你的第二种方法对我有用。我可以使用 [L 符号。谢谢!
【解决方案2】:

问题是您在示例中传递的字符串不是该类的正确字符串表示形式。此示例代码运行良好并打印为 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。如果这些字符串来自其他地方,并且您知道期望的格式,您可以编写一个方法将字符串转换为类加载器期望的格式。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多