java反射机制(2)

通过反射获取类之后,就要通过反射来进行对类的操作。比如说对类的属性赋值,调用某个方法等。

例:

 1 @Test
 2     public void testAssignment() {
 3         try {
 4             Class<?>clazz=Class.forName("basic.reflect.Person");
 5             //获取无参的构造函数
 6             Constructor<?> constructor=clazz
 7                     .getConstructor(new Class[]{});
 8             Object instance=constructor.newInstance(new Object[] {});
 9             //获取所有的方法
10             Method[] methods=clazz.getDeclaredMethods();
11             for(Method m:methods) {
12                 String methodName=m.getName();
13                 boolean flag=methodName.startsWith("set");
14                 if(flag) {
15                     //从第3个字符开始切割
16                     String fieldName=methodName.substring(3);
17                     //将首字符变小写并连接后续字符
18                     fieldName=fieldName.substring(0, 1).toLowerCase()+fieldName.substring(1);
19                     //获取指定属性
20                     Field field=clazz.getDeclaredField(fieldName);
21                     //获取属性的声明类型
22                     Class<?> type=field.getType();
23                     if(type==Integer.class) {
24                         //在具有指定参数的方法上调用此方法对象的底层方法
25                         m.invoke(instance,new Object[] {1});
26                     }
27                     //对比属性并且指定调用的方法所设置的属性
28                     if (type==String.class&&"address".equals(fieldName)) {
29                         m.invoke(instance, new Object[] {"北京"});
30                     }
31                     //同上
32                     if(type==String.class&&"name".equals(fieldName)) {
33                         m.invoke(instance, new Object[] {"李四"});
34                     }
35                 }
36             }
37             System.out.println(instance);
38             
39         } catch (Exception e) {
40             // TODO Auto-generated catch block
41             e.printStackTrace();
42         }
43         
44     }

 

posted on 2017-08-03 21:57  VbisoWen  阅读(164)  评论(0编辑  收藏  举报

导航