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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨天皓 于 2012-6-10 22:57 编辑

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {
        public static void main(String[] args) throws Exception {
                String startingClassName = args[0];    // 这里我在运行的时候会把要执行的Reflect 类的完整类名传进来。

                Method method = Class.forName(startingClassName).getMethod("main",String[].class);



                method.invoke(null,new Object[]{new String[]{"aa","bb","cc"}});      


               // 我知道这里是因为JDK1.5兼容了JDK1.4,如果单独传入一个String类型的数组,运行的时候会把他拆开来,
               //把数组中的每一个元素都当做一个参数传递,就会出现异常说参数类型不匹配。所以需要再次打包成一个数组来传递。
               //我的问题是,为什么要把他打包成一个Object的数组,而不是String的数组。不是说接收的参数和传入的参数要严格一致吗?
               //为什么把Object改成String以后编译都通不过.
   
        }
}


public class Reflect {

        public static void main(String[] args)
         {
                  for(String str : args)
                  {
                           System.out.println(str);
                  }
         }


5 个回复

倒序浏览
String类 也是一个 Object  

object是string它老子,它们流着同样的血
回复 使用道具 举报
唐志兵 发表于 2012-6-10 20:35
String类 也是一个 Object  

object是string它老子,它们流着同样的血

那为什么把Object改成String就不行?
回复 使用道具 举报
String[] 是数组,数据里面难倒还能存进去一个数组吗?  string[] 数组里面的成员应该是String类型的, 你要存进去一个String[]  就相当于把 String[]强制转换成 String. 这是不允许的。
回复 使用道具 举报
我改成这样就会报错:
method.invoke(null,new Object[]{new Integer[]{new Integer(1),new Integer(2)}}); //java.lang.IllegalArgumentException: argument type mismatch
api里注明invoke方法接受的方法参数是Object数组必须是Object类型,所以这里我们需要把String[]转化为Object[],这样可以通过编译,在运行时执行时,这个Object[]又会向下转型为String[],这才是我们的方法的参数类型。
回复 使用道具 举报
明白了谢谢各位
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马