最近写了一个例子是关于java的反射的
***先定义model类 student
public class Student {
private String name;
private String num;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", num=" + num + ", age=" + age + "]";
}
}
****再写调用类Main****
public class Main {
public static void main(String[] args) {
Student stu = new Student();
stu.setAge("24");
stu.setName("zhangsan");
stu.setNum("001");
Method[] methods = stu.getClass().getMethods();
Field[] fields=stu.getClass().getDeclaredFields();
for(Field field:fields){
System.out.println(field.getName());
}
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals("getName")
|| methods[i].getName().equals("getAge")
|| methods[i].getName().equals("getNum")) {
try {
System.out.println(methods[i].invoke(stu));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
}
*****分析:
主要是应用 Method[] methods = stu.getClass().getMethods();
Field[] fields=stu.getClass().getDeclaredFields();
这两个方法
for(Field field:fields){
System.out.println(field.getName());
}
这样可以遍历java类里面所有的变量。
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals("getName")
|| methods[i].getName().equals("getAge")
|| methods[i].getName().equals("getNum")) {
try {
System.out.println(methods[i].invoke(stu));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
通过这个方法methods[i].invoke(stu),可以反过来动态调用类的方法,并且获得它的返回值。
***在nc里面应用:
/**
* 将网页前台传过来的VO转换成nc的AggVO
*
* @param ordersVO
* @return
*/
public SaleOrderVO packageAggSaleOrderVO(OrdersVO ordersVO) {
SaleOrderVO aggVo = new SaleOrderVO();
// 将前台VO装换成nc后台VO
if (ordersVO != null) {
SaleorderHVO parent = new SaleorderHVO();
Map<String, Method> methodMap = getReflectFieldMap(ordersVO);
Set<String> fieldSet = methodMap.keySet();
for (String str : fieldSet) {
try {
parent.setAttributeValue(str,
methodMap.get(str).invoke(parent));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
***************************************
public Map<String, Method> getReflectFieldMap(Object oldVo) {
Method[] methods = oldVo.getClass().getMethods();
Field[] fields = oldVo.getClass().getDeclaredFields();
Map<String, Method> methodMap = new HashMap<String, Method>();
List<String> methodNames = new ArrayList<String>();
for (Field field : fields) {
methodNames.add(toGetMethodStr(field.getName()));
}
for (Method method : methods) {
for (String str : methodNames) {
if (method.getName().equals(str)) {
methodMap.put(toFieldStr(str), method);
}
}
}
return methodMap;
}