Java反射: array of classes vs.参数类型数组

标签 java reflection

我有一个类方法的对象 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/

相关文章:

java - 无法将 Hibernate 查询结果列表转换为对象类

go - 在 Golang 中反射(reflect)接口(interface)

java - 获取对匿名内部类的类对象的引用

java - jboss url 形式的 servlet

java - 如何获取Struts2中freemarker中的action名称?

c# - 在一个类的所有方法之前运行一个方法

java - 如何生成方法签名?

c# - 在运行时创建类型为对象的实例

c# - 如何从可空类型获取字符串表示形式?

java - 两个类之间的属性依赖