Java反射:类的数组与参数类型的数组

1 java reflection

我有一个类Method的对象.我调用m.getParameterTypes()了创建方法参数的数组参数.

我还有一个对象阵列arr.我想检查arr中的对象是否与params中的类型相同(并且顺序相同).

我所做的是创建一个数组类,其中包括arr中每个对象的类.然后我尝试将类与params进行比较.事实证明它们永远不会相等,因为classes数组中的类格式为java.lang.String,而param数组中的参数格式为String.我如何比较阵列?如何更改其中一个的格式?

Jon*_*eet 7

getParameterTypes()返回一个Class<?>[]而实际的参数本身就是对象(所以你会有一个Object[]).要检查参数是否有效,您可以使用:

if (parameterTypes.length != arr.length) {
  // Invalid: wrong number of arguments
}

for (int i=0; i < parameterTypes.length; i++) {
  if (arr[i] == null && parameterTypes[i].isPrimitive()) {
    // Invalid: can't pass null for a primitive parameter
  } else if (arr[i] != null && !parameterTypes[i].isInstance(arr[i])) {
     // Invalid: invalid argument type
  } else {
     // Valid
  }
}
Run Code Online (Sandbox Code Playgroud)

(当然,做任何你需要做的有效/无效案件.)