A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张旭明 中级黑马   /  2012-9-20 16:57  /  1411 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.day1;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args)throws Exception{
  Method m = ReflexPoint.class.getMethod("read", String[].class);
  String[] s = {"a","b","c"};
  
  ReflexPoint rfl = new ReflexPoint();
  m.invoke(rfl,new Object[]{s});                         //这里要包装个数组
}
}
class ReflexPoint{
  public void read(String[] args){
  System.out.println("String");
}     
}


package cn.itcast.day1;
import java.lang.reflect.Method;
public class Test2 {

public static void main(String[] args) throws Exception{
  Method m = Key.class.getMethod("read",int[].class);
  int[] i = {1,2,3};
  
  Key key = new Key();
  m.invoke(key, i);                         //这为什么只传int[] i ;就可以了
}
}
class Key{
public void read(int[] is){
  System.out.println("int");
}
}

第段代码中m.invoke(rfl,new Object[]{s}); 参数数组s因为要兼容1.4所以在外面再加了层数组,
而第段代码中m.invoke(key, i);参数int[] i ; 却可以不同包装数组。
很模糊说不清感觉,求解

评分

参与人数 1黑马币 +30 收起 理由
王德升 + 30 装箱那样去理解!

查看全部评分

3 个回复

倒序浏览
本帖最后由 彭润生 于 2012-9-20 17:18 编辑

public static void main(String[] args) throws Exception{
  Method m = Key.class.getMethod("read",int[].class);
  int[] i = {1,2,3};
  
  Key key = new Key();
  m.invoke(key, i);                         //这为什么只传int[] i ;就可以了,///// 因为int[] 本身就是一个对象,所以不用弄一个Object数组。
所以就可以了。
int[] i = {};
如果这样
Object[] obj = i;这就报错了。所以这是一个int[] 是一个对象。
回复 使用道具 举报
谢谢加好友!
回复 使用道具 举报
* 数组的反射,
* 具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。
* 代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类相对应的Class。
*
* 基本数据类型的一维数组可以被当做object类型使用,不可以当到object[]类型使用
* 非基本类型的一维数组,既可以当做Object,有可以当做Object[]使用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马