java反射调用时,参数是数组的问题

本文介绍如何在Java中使用反射机制正确调用带有数组参数的方法,解决因类型不匹配导致的问题,并给出具体示例。
method的invoke方法声明如下:
{code}
public Object invoke(Object obj, Object... args)
{code}

如果实际调用的方法参数是数组怎么办?比如下面这段代码会报错:
{code}
public class MBlogServiceImpl {

public List<Blog> queryBlogByIds(Long[] id) {
System.out.println("exe");
return new ArrayList<Blog>();
}
}

MBlogServiceImpl serviceBean = new MBlogServiceImpl();
Long[] params = new Long[]{1l};
Long param = new Long(1);
Method method = serviceBean.getClass().getMethod("queryBlogByIds",params.getClass());
Object obj = method.invoke(serviceBean,params);
System.out.println(obj);
{code}

其实method.invoke这行代码,eclipse编译的时候也会出现黄色警告:
The argument of type Long[] should explicitly be cast to Object[] for the invocation of the varargs method invoke(Object, Object...) from type Method. It could alternatively be cast to Object for a varargs invocation

把数据放在new Object[]{}就好了。
Object obj = method.invoke(serviceBean,new Object[]{params});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值