Java反射获取给定类的数组类

时间:2013-10-27 12:19:57

标签: java arrays reflection

所以我有这个C类,我想得到代表c表示的数组的Class对象。可能吗?我找不到任何办法......

澄清:我所拥有的其他地方:

Class<?> c = Class.forName("data.Person");

好的,我现在有了这个班级c。我希望拥有代表一系列人的Class。就像我一样:

Class<?> cs = data.Person[].class;

但我想用反思来做。我对原始课程一无所知,但对它的引用c

2 个答案:

答案 0 :(得分:6)

我想你想要Array.newInstance(c, 0).getClass()

答案 1 :(得分:2)

要创建某种数组类型的Class实例,您还可以使用Class.forName()。您只需要使用[L;围绕基本类型([的数量是维度数),所以

  • 字符串String[].class的一维数组类将为[Ljava.lang.String;
  • 字符串String[][].class的二维数组类将为[[Ljava.lang.String;
  • 在您的情况下,data.Person [] .class将为[Ldata.Person;

这意味着您需要做的就是

  • 如果type不是数组,则添加[L;
  • 如果type已经是数组,则在start处添加另一个[

因此,对于动态c,您可以使用类似

的内容
Class.forName(c.isArray()?"["+c.getName():"[L"+c.getName()+";")