package other;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Date;
import java.sql.Timestamp;
public class StuReflect {
public static void main(String[] args) {
try {
Stu stu1 = new Stu();
stu1.setName("lisi");
stu1.setFname("aaa");
Object object = stu1;
method(object, "name", "get", "");
method(object, "name", "set", "ws");
method(object, "name", "get", "");
method(object, "fname", "get", "");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param model 反射对象
* @param name 反射域
* @param method set/get
* @param value 重新赋值
* @return
*/
public static Object method(Object model,String name,String method,Object value) {
try {
Method m = null;
Field field = model.getClass().getDeclaredField(name);
// 获得属性的类型
String type = field.getGenericType().toString();
// 可以访问私有属性
field.setAccessible(true);
name = name.replaceFirst(name.substring(0, 1), name.substring(0, 1).toUpperCase());
// 如果是类类型,前面包含class,后面跟类名
if (type.equals("class java.lang.String")) {
if ("get".equals(method)) {
m = model.getClass().getMethod(method + name);
// get方法获取属性
System.out.println(m.invoke(model));
return (String)m.invoke(model);
}else if ("set".equals(method)) {
m = model.getClass().getMethod(method + name,String.class);
// set方法获取属性
m.invoke(model,(String)value);
}
}
if (type.equals("class java.lang.Float")) {
if ("get".equals(method)) {
m = model.getClass().getMethod(method + name);
// get方法获取属性
return (Float)m.invoke(model);
}else if ("set".equals(method)) {
m = model.getClass().getMethod(method + name,String.class);
// set方法获取属性
m.invoke(model,(Float)value);
}
}
if (type.equals("class java.lang.Date")) {
if ("get".equals(method)) {
m = model.getClass().getMethod(method + name);
// get方法获取属性
return (Date)m.invoke(model);
}else if ("set".equals(method)) {
m = model.getClass().getMethod(method + name,String.class);
// set方法获取属性
m.invoke(model,(Date)value);
}
}
if (type.equals("class java.lang.Timestamp")) {
if ("get".equals(method)) {
m = model.getClass().getMethod(method + name);
// get方法获取属性
return (Timestamp)m.invoke(model);
}else if ("set".equals(method)) {
m = model.getClass().getMethod(method + name,String.class);
// set方法获取属性
m.invoke(model,(Timestamp)value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
package other;
public class Stu {
private String name;
private String fname;
private Integer age;
private Double height;
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
}