java 反射 调用方法参数_java 使用反射调用可变参数方法

使用反射操作对象-调用可变参数方法

要把可变参数都当做是其对应的数组类型参数;

如 show(XX... is)作为show(XX[] is)调用;

若可变参数元素类型是引用类型:

JDK内部接收到参数之后,会自动拆包取出参数再分配给该底层方法,为此我们需要把这个数组实参先包装成一个Object对象或把实际参数作为一个Object一维数组的元素再传递。

若可变参数元素类型是基本类型:

JDK内部接收到参数之后,不会拆包,所以可以不必再封装.不过封装了也不会错.所以建议,不管基本类型还是引用类型都使用Object[]封装一层,保证无误.

例子

package junereflect624;

//可变参数的方法调用

import java.lang.reflect.Method;

class VaryMethod{

public static void show(int ...args){

System.out.println("基本数据类型传递过来了!");

}

/*public static void show(int[] args){//这是一样的

}*/

public static void show(String ...args){

System.out.println("引用数据类型传递过来了!");

}

}

public class InvokeVaryDemo10 {

public static void main(String[] args) throws Exception{

Class c = VaryMethod.class;

Method m = c.getMethod("show",int[].class);

m.invoke(null,new int[]{1,2,3});

m = c.getMethod("show",String[].class);

//m.invoke(null,new String[]{"A","B","C"});//ERROR

m.invoke(null,(Object)new String[]{"A","B","C"});//YES,强转为Object类型

m.invoke(null,new Object[]{new String[]{"A","B","C"}});//推荐写法

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值