通过反射获取类之后,就要通过反射来进行对类的操作。比如说对类的属性赋值,调用某个方法等。
例:
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 }