如何知道方法是否使用反射将数组作为参数

时间:2011-06-20 14:31:22

标签: java arrays reflection methods

我试图用给定的输入参数调用API。输入参数作为列表出现。现在我的工作是逐个获取API的参数类型,并从List构建所需的类型实例。我可以为简单的java类型,List,Set做,但我被困在数组。

Method  method = getMethodFromTheClassBasedOnvalues(  loadedClass,   apiName, numberOfParams);
     Type[] apiMethodParams = method.getGenericParameterTypes();
         List<Type> expectedParamTypes = Arrays.asList(apiMethodArgTypes);
     List<Object> actualValues = // method input.

    List<Object> argsList = new ArrayList<Object>();
    for (int i = 0; i < expectedParamTypes.length; i++) {
        argsList.add(castToRequiredType(expectedParamTypes.get(i),
                actualValues.get(i)));

    method.invoke(loadClass.newInstance(), argsList.toArray());

当我得到API类型的方法(String,String [])时出现问题我尝试通过调用method.getGenericParameterTypes()来获取GenericTypes,返回和数组如下:  [class java.lang.String, class [Ljava.lang.String;]或者如果一个参数[Ljava.lang.String; 基于此,我怎么知道它是否采用Array of String。我看到不同之处是类名是在[L并且完成之后开始;但它有保证吗? 对于CustomObject [],bevhiour是否也相同?

有没有什么聪明的方法可以知道该方法是采用数组并最近构建它? 任何有关这方面的想法都会有所帮助。

提前致谢。

3 个答案:

答案 0 :(得分:2)

[L表示确实是一个对象数组。请参阅示例here。 但检查某个类是否代表数组的最佳方法是isArray方法。

答案 1 :(得分:2)

尝试使用

Class [] Method.getParameterTypes()

之后,您可以调用Class.isArray()并确定此参数类是否为数组

答案 2 :(得分:1)

您尚未显示castToRequiredType正在做什么,但如果您最终将Type转换为Class,则可以使用Class.isArrayClass.getComponentType