我正在尝试使用给定的输入参数调用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;基于此,我怎么知道它是否取字符串数组。我看到的区别是类名以[L开头,以结尾;但它能保证吗?CustomObject[]的贝夫也会相同吗?
有没有什么聪明的方法可以知道该方法是否正在获取数组并在最近构建它?任何朝这个方向的想法都会有所帮助。
提前谢谢。
尝试使用
Class[]Mehotd.getParameterTypes()
之后,您可以调用Class.isArray()并确定该参数类是否为数组
[L实际上是一个对象数组。请参阅此处的示例。但是,检查某个类是否表示数组的最佳方法是isArray方法。
您还没有显示castToRequiredType
在做什么,但如果您最终将Type
转换为Class
,则可以使用Class.isArray
和Class.getComponentType
。