使用场景
想象一种场景:JSON数据{"name":"li","age":10}如何填充到java类Person中
想象例外一种情况:java类Person 有属性name1,name2,...name100...,怎么设置属性的每一个值
解决上面的问题,就要用到反射
定义一个类Person
public class Person {
private Long id;
private String name;
private Double money;
private Date createTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
...
}
使用反射 为类的属性赋值
public static Person reflectSet(Person person){
String names[]= {"id","name","money","createTime"};
Object values[]={10L,"张三",100.50,new Date()};
try {
for(int i=0;i<4;i++){
Field f;
f = person.getClass().getDeclaredField(names[i]);
System.out.println("属性类型:"+f.getGenericType().toString());
f.setAccessible(true);
f.set(person, values[i]);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return person;
}
使用反射访问类的私有属性值
public static Person reflectGet(Person person){
String names[]= {"id","name","money","createTime"};
try {
for(int i=0;i<4;i++){
Method m = (Method) person.getClass().getMethod("get" + getMethodName(names[i]));
Object vala = m.invoke(person);// 调用getter方法获取属性值
System.out.println(names[i]+":"+vala);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return person;
}
// 把一个字符串的第一个字母大写
private static String getMethodName(String fildeName) throws Exception{
byte[] items = fildeName.getBytes();
items[0] = (byte) ((char) items[0] - 'a' + 'A');
return new String(items);
}