public class Human {
private String name;
private int lv;
public Human(String name ,int lv){
this.name = name;
this.lv = lv;
}
public void setLv(int lv){
this.lv = lv;
}
public void setLv(String s){
//这里故意加了个重载的setAge方法
}
}
public static void main(String[] args)throws Exception{
Human h = new Human();
PropertyDescriptor pd = new PropertyDescriptor("name",Human.class);
Method methodSetName = pd.getWriteMethod();
methodSetName.invoke(h, "zhaoliu");
PropertyDescriptor pd = new PropertyDescriptor("lv",Human.class);
Method methodSetLv = pd2.getWriteMethod();
methodSetLv.invoke(h, 3); //这句改成methodSetAge2.invoke(h, "lk");就报错。
System.out.println(h.getName()+":"+h.getLv());
}
输出结果是
zhaoliu:3
但是我把methodSetLv.invoke(h, 3);
改成methodSetLv.invoke(h, "lk");就报错。
一般的反射Method methodSetLv = Human.class.getMethod("setLv", int.class);需要指定参数类型,
而JavaBean不用指定,当同一方法有多个重载类型时是怎么确定用哪个。
|