本帖最后由 李金中 于 2014-2-12 16:36 编辑
关于张孝祥老师视频里对于形参为数组的函数的反射的两种调用方法的分析
package com.itheima;
import java.lang.reflect.*;
public class reflex {
public static void main(String[] args)throws Exception
{
Person p1 = new Person("First");
Method mPerson2 = Class.forName("com.itheima.Person").getDeclaredMethod("setName", String.class);
mPerson2.invoke(p1, "abc");//第一种方式,按JDK1.5进行分析
mPerson2.invoke(p1, (Object)"abc");//第一种方式,把object显示调出,同上一句一样的效果。
mPerson2.invoke(p1, new Object[]{"abc"});//第二种方式,按JDK1.4进行分析
Method mPerson = Class.forName("com.itheima.Person").getDeclaredMethod("print", String[].class);
mPerson.setAccessible(true);
/*第一种, 对应JDK1.5,告诉编译器我就一个Object参数,是用JDK1.5的方式传的;若果不加object修饰,编译器就会把
new String[]当成 new Object[],按第二种即JDK1.4的方式进行解析,肯定不好使。*/
mPerson.invoke(p1, (Object)new String[]{"Hello","World!"});//此处 new String[]{"Hello", "World!"}等同于上面的"abc"
mPerson.invoke(p1, new Object[]{new String[]{"Hello", "World!"}});//第二种,对应JDK1.4的方式,进行解析
}
}
class Person
{
Person(String str)
{
pStr = str;
}
public String getName()
{
return pStr;
}
public void setName(String str)
{
pStr = str;
}
public void print(String[] args)
{
for(String str : args)
{
System.out.println(str);
}
}
public String toString()
{
return pStr;
}
private String pStr;
private int num;
}
分析见代码注释!!。。。。。。
|
|