java反射的两个Demo(反射属性,属性名,反射调用方法,内省)
1 demo的功能类
public class InvokeDemo {
private static Logger log = LoggerFactory.getLogger(InvokeDemo.class);
private static Student student;
public static Student buildStudent() {
student = new Student();
student.setStudentName("zhangsan");
student.setAge(11);
student.setLike("football");
student.setPhoneNo("12312312123");
student.setStudentNo("110");
return student;
}
public Map<String, Object> convertStudent(Student student) {
if (student == null) {
return null;
}
Map<String, Object> studentMap = new HashMap<String, Object>();
try {
BeanInfo beanInfo = Introspector.getBeanInfo(student.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName().toUpperCase();
if (!key.equals("CLASS")) {
Method getter = property.getReadMethod();
Object value = getter.invoke(student);
studentMap.put(key, value);
}
}
} catch (Exception e) {
log.info("convertStudent Error " + e);
}
return studentMap;
}
public boolean isChildren(Integer age)
throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
boolean isChildren = false;
if (age != null) {
String studentClassPosition = "com.xxx.entity.Student";
Class studentClass = Class.forName(studentClassPosition);
Object studentClassObj = studentClass.newInstance();
Method method = studentClass.getMethod("isChild", Integer.class);
isChildren = (boolean) method.invoke(studentClassObj, age);
} else {
isChildren = false;
}
return isChildren;
}
public static void main(String[] args) {
InvokeDemo invokeDemo = new InvokeDemo();
Student student = invokeDemo.buildStudent();
Map<String, Object> studentMap = invokeDemo.convertStudent(student);
System.out.println(studentMap.toString());
Integer age = student.getAge();
try {
System.out.println(invokeDemo.isChildren(age));
} catch (Exception e) {
e.printStackTrace();
}
}
}
2 demo实体类
public class Student {
private String studentName;
private Integer age;
private String studentNo;
private String like;
private String phoneNo;
public boolean isChild(Integer age) {
if (age < 18) {
return true;
} else {
return false;
}
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getStudentNo() {
return studentNo;
}
public void setStudentNo(String studentNo) {
this.studentNo = studentNo;
}
public String getLike() {
return like;
}
public void setLike(String like) {
this.like = like;
}
public String getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
}