public class Student{
private long id;
private String name;
private int age;
get/set
}
public void test(Object o,String msg){
//…
}
有一个类Student如上,我们需要实现一个方法test如上.
要求:
1.参数o表示要操作的对象
2.参数msg是一个固定格式的字符串
例如:
Object o = new Student();
String msg = “id=5”;
t.test(o,msg);
然后test方法中需要调用到o对象中的和id属性对应的setId方法并且把5当做值传递进去
3.异此类推,完成”id=5” “name=tom” “age=20”等形式的传值调用test方法
——————————————分割线———————————————————-
package com.briup.反射List;
import java.lang.reflect.Method;
public class Student{
private long id;
private String name;
private int age;
public void test(Student o,String msg){
try {
Class<? extends Student> c = o.getClass();
String[] split = msg.split("=");
String a = split[0];// id
//Id
String cs=""+(char) ((a.substring(0, 1).toCharArray()[0])-32)+a.substring(1);
String b = split[1];// 5
if("id".equals(a)){
Method method = c.getMethod("set"+cs, long.class);
method.invoke(o, Long.parseLong(b));
}else if("age".equals(a)){
Method method = c.getMethod("set"+cs,int.class);
method.invoke(o, Integer.parseInt(b));
}else if("name".equals(a)){
Method method = c.getMethod("set"+cs, String.class);
method.invoke(o, b);
}else{
}
} catch (Exception e) {
e.printStackTrace();
}
}
public long getId() {
return id;
}
public void setId(long id) {
System.out.println(id+"----setId");
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student() {}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
——————————————分割线———————————————————-
package com.briup.反射List;
public class T {
public static void main(String[] args) {
try {
Student o = new Student();
String msg1 = "id=5";
String msg2 = "name=tom";
String msg3 = "age=20";
o.test(o,msg1);
o.test(o,msg2);
o.test(o,msg3);
System.out.println(o);
} catch (Exception e) {
}
}
}