本帖最后由 褚代江 于 2012-5-10 14:05 编辑
首先向林康 同志道歉,我错了,是我将一个单词写错了,引出了很多的问题。这个也提醒大家注意,java都是英语的,所以单词写错是常事,要好好检查自己的单词拼写。
下面我们再来看看《关于反射中的Method类得到无参数方法的问题 》
像得到一个toStirng方法。toString是一个无参的方法,那么在用反射的到此方法时,我们该怎样写入getMethod后面的参数呢。
Method methodToString=String.class.getMethod("toString",null);//①
这里因为是无参数,所以要写成null是没有什么疑问的。那么现在我们该怎样调用呢?‘
System.out.println(methodToString.invoke("abc"));
这里打印出abc是没有问题的。
但是我现在想传人一个int[]类型的,并打印出来。这时
System.out.println(methodToString.invoke(new String[]{"a"}));//②
但是这时将①②放在一起就会报错
错误提示:java.lang.IllegalArgumentException: object is not an instance of declaring class
在这里纠结了半天,int[]类型有toString方法的啊。但是怎么就有错误呢!!!!!!!!!!!!!!
困惑了,但是后来在贠靖同志的帮助下。发现了我们在②调用toString方法时,使用的是String.class字节码。但是我们却用int[]类型上。所以这样会出现上面的错误。那么我门可以这样来改正
将①换成Method methodToString=int[].class.getMethod("toString",null);//③
这样就可以传入int[]的了,但是这时有传不了Stirng的字符串了啊,后来我们想到toStirng是Object类的。
所以直接改成Method methodToString=Object.class.getMethod("toString",null);//④
这样不管是传人int[],还是Stirng,还是String[]都可以了,但是这里强调一点,在其他类复写了toString方法后,那么在用反射得到这个类的toString方法时可能输出的会有所不同的。
总之大家多考虑下问题,其实总会有解决的办法的。
在这里再次感谢贠靖同志啊,嘿嘿 |