<pre name="code" class="java"> /**
*
* @function
* @param args
* @author
* @Date 2015-1-9
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
try {
//这里是拿到list类的类类型 也就是java.util.ArrayList
Class c = list.getClass();
//通过反射拿到我们要添加的方法,第一个参数为方法名,第二个参数为添加类型
Method method = c.getMethod("add", Object.class);
//我们正添加 是这样的list.add 反射叫 意思就是反过来操作 先拿到方法名
//第一个参数为要操作的对象这里是list,第二个参数就是我们要添加的值或者说是要操作的值
method.invoke(list,"test");
for (String string : list) { //这里就是我们的遍历了
System.out.println(string); //上面的代码可以正常的添加一个值 打印的结果:test
}
<span style="white-space:pre"> </span>//通过反射修改其私有方法的访问修饰符
User u = new User();
Class cl =u.getClass();
/*注意这里 getMethods()方法获取的是所有的public的函数,包括父类继承而来的
getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限*/
Method m=cl.getDeclaredMethod("show"); //所以这里必须是getDeclaredMethod
m.setAccessible(true); //这里是设置防问权限
m.invoke(u); // 这里可以正常打印 正在显示show...
<span style="white-space:pre"> </span>//通过反射修改其私有属性的值
/*注意这里 getField()方法获取的是所有的public的函数,包括父类继承而来的
getDeclaredField()获取的是所有该类自己声明的方法,不问访问权限*/
Field field= cl.getDeclaredField("name"); //字段名
field.setAccessible(true); //这里是设置防问权限
field.set(u, "李四"); //修改值
System.out.println(u.getName()); // 这里可以输出的就是李四了
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
上面介绍了利用反射添加数据,修改防问权限、修改私有的属性!!!