java方法中只有一个参数是数组,反射的时候我们不能想当然的传歌数组进去,传数组进去的时候表示多个参数。
两个数组不是一个意思啊。
我们应该把数组转为objet,这样才表示一个参数。
import java.lang.reflect.Method;
public class MethodTest {
public void a(String[] args) {
System.out.println("a");
}
public static void main(String[] args) throws Exception {
MethodTest obj = new MethodTest();
Method m = obj.getClass().getMethod("a", String[].class);
m.invoke(obj, new String[1]); // new String[1] 其实是null,是一个object
m.invoke(obj, (Object) new String[] {}); // 这里强制转成了object,所以也是object
m.invoke(obj, new String[] {}); // 报错,这里是个数组,是个object数组,a方法只有一个参数,所以报错
}
}
结果是
a
a
Exception in thread "main"
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
分享到:
相关推荐
首先,arguments对象是一个类数组对象,它包含了函数调用时传入的所有参数。这个对象在函数内部可用,每个函数调用都会创建一个新的arguments对象实例。值得注意的是,arguments对象并不是一个真正的数组,它没有...
本案例中的问题集中在“wdaproxy”上,这是一个用于iOS设备自动化测试时,建立ADB(Android Debug Bridge)和iOS设备之间桥梁的工具。当尝试启动wdaproxy时,它会立即退出并返回exit status 234错误码,这通常是由于...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个资源“java反射调用实例代码”提供了关于如何使用Java反射API进行各种...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时访问类的信息,并能够动态地创建对象、调用方法以及获取字段值等。这种能力对于框架设计、代码生成等场景具有重要意义。 #### 二、反射...
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
JavaScript中的`arguments`对象是一个非常重要的特性,尤其在处理不确定数量的函数参数时。它不是一个真正的数组,但具有数组类似的行为,允许我们访问函数调用时传入的所有参数。在这个文档中,我们将深入探讨`...
### 关于 JSNI 调用 Java 方法时的 Type Signatures 说明 #### 一、Type Signatures 的概念与重要性 在 Java Native Interface (JNI) 和 Google Web Toolkit (GWT) 中,Type Signatures 是一种特殊的表示法,用于...
因此,我们不能直接对 arguments 使用一些数组的方法,例如 push, pop 或 slice 等。 所以为了使用这些方法,我们就需要将其转换为一个真正的数组。 转化为数组 下面的代码将会返回一个包含 arguments 对象所有元素...
形式参数指的是定义方法时所明确指定的参数,而实际参数则是指javascript实际调用时所传递的参数。arguments正是这些实际参数的集合体。 在函数say的定义中,我们可以看到有三个形式参数:msg、other和garbage,...
在JavaScript编程中,`arguments`对象是一个非常有用的特性,尤其是在处理函数调用时不确定参数数量的情况下。虽然它不是ECMAScript标准的一部分,但所有主流浏览器都支持这一特性,使其成为开发人员在设计灵活、可...
在Java程序中,命令行参数是通过`main`方法的`String[] args`数组传递的,它们允许我们在不修改代码的情况下改变程序的输入或行为。例如,你可以使用命令行参数来设置日志级别、配置文件路径或应用程序的运行模式。 ...
1. **数组化转换**:通过`toArray()`方法,可以将`arguments`对象转换为一个真正的数组,方便我们使用数组方法进行操作。 2. **扩展方法**:`arguments-extended`为`arguments`对象添加了类似于数组的方法,如`...
在JavaScript编程语言中,`arguments`对象是一个非常重要的特性,特别是在处理函数参数时。它不是一个真正的数组,而是一个类数组对象,提供了访问函数调用时传递的所有参数的途径。无论函数定义了多少个形式参数...
在JavaScript编程语言中,`arguments`对象是一个非常重要的特性,尤其在处理函数参数时。它不是一个数组,而是一个类数组对象,提供了访问函数调用时传递的所有参数的途径,无论这些参数是否在函数定义中声明。`...
Java中的可变参数(Variable Arguments)是编程中一个便利的功能,允许我们在方法声明时定义一个可以接受任意数量相同类型参数的参数列表。这种特性在处理不确定数量输入时非常有用,比如函数式编程中的高阶函数。 ...
在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理以及处理泛型等。下面将详细介绍Java反射的基本概念和如何通过代码实现。 1. **Java反射基础** - **Class对象**:每个...
Varargs的含义是“variable number of arguments”,有时候也被简单的称为“variable arguments”。 三、定义实参个数可变的方法 定义实参个数可变的方法只要在一个形参的“类型”与“参数名”之间加上三个连续的...
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未知。这为开发者提供了动态性,可以处理未知类型的对象,或者在运行时发现和调用类的...
`arguments`可以被转换为真正的数组,例如通过`Array.prototype.slice.call(arguments, 0)`,这使得我们可以使用数组的方法,如`forEach`、`map`或`for...of`循环来遍历和操作这些参数。 4. **数组遍历**: 遍历...
printf("The number of command line arguments is:%d\n", argc); printf("The program name is:%s\n", argv[0]); if (argc > 1) { printf("The other arguments are following:\n"); for (i = 1; i ; i++) { ...