通过构造函数的反射提取参数类型

时间:2012-07-22 08:44:21

标签: java reflection

我正在尝试使用java.lang.reflect.Constructor<T>方法从getParameterTypes()对象中提取参数类型

构造函数如下所示:

 public SearchParameters(boolean doStaticBoosting, boolean doRewrites, boolean doCatalogsFacet, long userId,
                            Filter catalogsFilter, boolean doCatalogsFilterTypeFacet, boolean doSocialBoosting,
                            long[] categoryFilteringId)

现在,当我调用此方法时,我得到以下参数类型:

enter image description here

如您所见,最后一个Class参数确实搞砸了并定义为

  

班级[J

实际上我希望它是long[].class。我需要稍后重建这个对象,当然我只能根据我得到的参数信息来做到这一点。

3 个答案:

答案 0 :(得分:4)

这根本不是搞砸了。这只是long[].class的字符串表示形式:

System.out.println(long[].class); // class [J

除非你真的需要以某种方式保留字符串表示,否则你应该将值保持为Class<?>并且一切都应该很好。

答案 1 :(得分:2)

这是long[]类的名称。试试这个:

    long[] longs = {1L, 2L};
    System.out.println("Name is: " + longs.getClass().getName());

打印:

Name is: [J

您可以从Javadocs of Class.getName()获取所有原始数组类的名称。

答案 2 :(得分:1)

class [J long[].class的名称。查看Class.getName() JavaDoc

此外,您可以使用此名称创建long[].class的实例,请参阅:How to create a Class of primitive array?