我有一个类方法的对象 m。我调用了 m.getParameterTypes()
来创建方法参数的数组参数。
我还有一个对象数组 arr。我想检查 arr 中的对象是否与 params 中的类型相同(并且顺序相同)。
我所做的是创建一个数组类,其中包含 arr 中每个对象的类。然后我尝试将类与参数进行比较。事实证明它们永远不可能相等,因为类数组中的类的格式为 java.lang.String
而 param 数组中的参数的格式为 String
。我如何比较数组?如何更改其中一个的格式?
最佳答案
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
}
}
(当然,对有效/无效的情况做任何你需要做的事情。)
关于Java反射: array of classes vs.参数类型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/942174/